0

バックグラウンドタスク内のコードだけでなく、バ​​ックグラウンドタスクからアプリでメソッドを実行できるかどうか疑問に思っていました。質問する理由は、ライブタイルをWebサーバーからのデータで更新するバックグラウンドタスクがあるためです。次のように、バックグラウンドタスク内に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

ここでは多くのことを行う必要はありませんので、私は推測しています。私の提案 -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 に答える
0

バックグラウンド タスクをデバッガーで実行して、エラーが発生しないことを確認しましたか? そのために使用できるコンボボックスDebug Locationの横のツールバーにドロップダウンボタンがあります。Processアプリを起動し、ドロップダウン ボタンでバックグラウンド タスクの名前をクリックするだけです。

ここに画像の説明を入力

Its Run method will start executing immediately and you'll be able to debug it just like your app code. I suppose the main reason you'd like to call an existing method in your app from the task is to be able to properly debug it.

You can find even more details on debugging tasks in this article on MSDN.

于 2013-03-07T05:50:16.200 に答える