使用后台任务使用Web服务数据更新实时磁贴

时间:2013-03-06 10:46:39

标签: c# .net windows-8 windows-runtime windows-store-apps

我想知道它可以在我的应用程序中从后台任务中运行一个方法吗?而不仅仅是后台任务中的代码。我问的原因是我有一个后台任务,我想用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服务的调用。无论如何我可以让后台任务调用应用程序代码中的方法吗?

2 个答案:

答案 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工具栏中有一个下拉按钮,您可以使用该按钮。只需启动您的应用程序,然后在下拉按钮中单击后台任务的名称。

enter image description here

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

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