0

我想知道是否可以从后台任务在我的应用程序中运行方法?,而不仅仅是后台任务中的代码。我问的原因是我有一个后台任务,我想用来自网络服务器的数据更新我的活动磁贴。我将 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 服务时停止。无论如何我可以让后台任务调用应用程序代码中的方法吗?

4

2 回答 2

0

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

在此处输入图像描述

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

您可以在 MSDN 上的这篇文章中找到有关调试任务的更多详细信息。

于 2013-03-07T05:50:16.200 回答
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();
    ...
于 2013-03-06T14:04:26.493 回答