C# 使用后台任务使用webservice数据更新活动互动程序

C# 使用后台任务使用webservice数据更新活动互动程序,c#,.net,windows-8,windows-runtime,windows-store-apps,C#,.net,Windows 8,Windows Runtime,Windows Store Apps,我想知道是否可以在我的应用程序中从后台任务?运行一个方法,而不仅仅是后台任务中的代码。我问的原因是我有一个后台任务,我想用webserive中的数据更新我的live互动程序。我将webservice调用放在后台任务中,如下所示: public sealed class TileUpdater : IBackgroundTask { public async void Run(IBackgroundTaskInstance taskInstance) { Servi

我想知道是否可以在我的应用程序中从后台任务?运行一个方法,而不仅仅是后台任务中的代码。我问的原因是我有一个后台任务,我想用webserive中的数据更新我的live互动程序。我将webservice调用放在后台任务中,如下所示:

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();
    }
}
公共密封类TileUpdater:IBackgroundTask
{
公共异步无效运行(IBackgroundTaskInstance taskInstance)
{
ServiceReference.WebServiceSoapClient测试=新建ServiceReference.WebServiceSoapClient();
var nb=await test.GetLatestDataAsync(“temp”);
双温=nb.值;
字符串单位=nb.单位;
字符串latestTemp=“”+nb.值+“”+nb.单位;
var defferal=taskInstance.getDeleral();
var updater=TileUpdateManager.createTileUpdateForApplication();
EnableNotificationQueue(true);
updater.Clear();
对于(int i=1;i<6;i++)
{
var tile=TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText02);
tile.GetElementsByTagName(“文本”)[0].InnerText=“tile”+latestTemp;
tile.GetElementsByTagName(“text”)[1].InnerText=DateTime.Now.ToString(“hh-mm”);
Update(新的TileNotification(tile));
}
defferal.Complete();
}
}

然而,当我运行应用程序时,什么也没有发生,我也不会出错。它似乎在调用Web服务时停止。我是否可以在应用程序代码中将后台任务调用作为一种方法?

这里没有太多内容,所以我猜一下。我的建议-将
getdeleral
行移到第一行:

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();
    ...

您是否尝试过在调试器中运行后台任务以确保没有错误发生?在
Debug Location
工具栏的
Process
组合框旁边有一个下拉按钮,您可以使用它。只需启动应用程序,然后在下拉按钮中单击背景任务的名称

它的
Run
方法将立即开始执行,您可以像调试应用程序代码一样调试它。我想您希望从任务中调用应用程序中的现有方法的主要原因是能够正确地调试它

您可以在中找到有关调试任务的更多详细信息