3

なぜバックグラウンドタスクが開始されないのかを理解しようとしていますが、何が間違っているのかわかりません。

私がやろうとしていること:WebApiを介して最新の5つのアイテムをダウンロードする自動化されたバックグラウンドタスクが必要です(データは数kBです)。ダウンロード後、ローカルファイルをチェックして、利用可能な新しいアイテムがあるかどうかを確認します。もしそうなら、新しいアイテムの数でLiveTileにバッジを作成したいと思います。

私は次のコードを持っています:

private BackgroundTaskRegistration ScheduleBackgroundTask()
{
    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {
        if (cur.Value.Name == "TimeTriggeredTask")
        {
            return (BackgroundTaskRegistration)(cur.Value);
        }
    }

    var builder = new BackgroundTaskBuilder();

    builder.Name = "TimeTriggeredTask";
    builder.TaskEntryPoint = "Tasks.UpdateItemTask";
    builder.SetTrigger(new MaintenanceTrigger(15, false));
    builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
    builder.AddCondition(new SystemCondition(SystemConditionType.UserNotPresent));

    BackgroundTaskRegistration task = builder.Register();
    return task;
}

そして私の仕事は次のようになります:

namespace Tasks
{
    public sealed class UpdateItemTask : IBackgroundTask
    {
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            Debug.WriteLine("Starting");

            BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

            DataHandler dataHandler = new DataHandler();
            BindableCollection<GeekAndPokeItemViewModel> latestItemsOnline = await dataHandler.GetData("10");
            BindableCollection<GeekAndPokeItemViewModel> latestItemsLocal = await dataHandler.GetLocalData();

            int difference = latestItemsOnline.Except(latestItemsLocal).Count();

            if (difference > 0)
            {
                BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();
                BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent((uint)difference);

                // send the notification to the app's application tile
                BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeContent.CreateNotification());
            }

            _deferral.Complete();
        }
    }
}

私のappmanifestでは、backgroundTaskはタスク「タイマー」と正しいエントリポイントで拡張されています。

すべてのコードは1つのプロジェクトに含まれています。

デバッガーが接続されていても(アプリを起動せずにプログラムをデバッグし、タスクを強制的に起動します)、タスク(またはブレークポイント)にヒットせず、イベントビューアーで次の結果が得られます。

エントリポイントTasks.UpdateItemTaskと名前TimeTriggeredTaskを持つバックグラウンドタスクは、エラーコード0x80010008でアクティブ化できませんでした。

はMSバックグラウンドタスクのサンプルをチェックしてきましたが、それらでも役に立ちません。これはそれほど難しいことではないことをお勧めしますが、うまくいくことはできません。

4

1 に答える 1

5

やっと出来ました!!

最初に、タスクを Windows RT コンポーネント タイプとして新しいアセンブリに移動し、WinRT アプリに参照を追加しました。

2番目:1つのcsファイルにBackgroundTaskRegistrationとUpdateItemTaskがあり、タスクのみが封印されていました。コンパイルするには、BackgroundTaskRegistration もシール済みとして設定する必要がありました。トリガーを強制的に起動すると、最終的にブレークポイントに到達します...

于 2013-03-05T10:20:45.907 に答える