我想知道它可以在我的应用程序中从后台任务中运行一个方法吗?而不仅仅是后台任务中的代码。我问的原因是我有一个后台任务,我想用webserive中的数据更新我的实时图块。我将Web服务调用放在后台任务中,如下所示:
public sealed class TileUpdater : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
ServiceReference.WebServiceSoapClient test = new ServiceReference.WebServiceSoapClient();
var nb = await test.GetLatestDataAsync("temp");
double temperature = nb.Value;
string unit = nb.Unit;
string latestTemp = " " + nb.Value + " " + nb.Unit;
var defferal = taskInstance.GetDeferral();
var updater = TileUpdateManager.CreateTileUpdaterForApplication();
updater.EnableNotificationQueue(true);
updater.Clear();
for (int i = 1; i < 6; i++)
{
var tile = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText02);
tile.GetElementsByTagName("text")[0].InnerText = "Tile " + latestTemp;
tile.GetElementsByTagName("text")[1].InnerText = DateTime.Now.ToString("hh-mm");
updater.Update(new TileNotification(tile));
}
defferal.Complete();
}
}
然而,当我运行应用程序时,没有任何反应,我不会得到错误。看起来它停止了对web服务的调用。无论如何我可以让后台任务调用应用程序代码中的方法吗?
答案 0 :(得分:0)
这里没有太多可以继续的,所以我猜了。我的建议 - 将GetDeferral
行移到第一位:
public async void Run(IBackgroundTaskInstance taskInstance)
{
var defferal = taskInstance.GetDeferral();
ServiceReference.WebServiceSoapClient test = new ServiceReference.WebServiceSoapClient();
var nb = await test.GetLatestDataAsync("temp");
double temperature = nb.Value;
string unit = nb.Unit;
string latestTemp = " " + nb.Value + " " + nb.Unit;
// move up
// var defferal = taskInstance.GetDeferral();
...
答案 1 :(得分:0)
您是否尝试在调试器中运行后台任务以确保不会发生错误? Debug Location
组合框旁边的Process
工具栏中有一个下拉按钮,您可以使用该按钮。只需启动您的应用程序,然后在下拉按钮中单击后台任务的名称。
它的Run
方法将立即开始执行,您将能够像应用程序代码一样调试它。我想你想从应用程序中调用现有方法的主要原因是能够正确调试它。
您可以在this article on MSDN中找到有关调试任务的更多详细信息。