PeriodicTask バックグラウンド エージェントを介してライブ タイルを更新する Windows Phone 7 アプリをマーケットプレースにデプロイしています。
1 人のユーザーが、しばらく動作していたタイルが更新されないという問題を報告しています。
彼らが電話でバックグラウンド タスクを確認すると、それは無効になっており、[次回このアプリケーションを開いたときにバックグラウンド タスクをオンに戻す] チェックボックスがオンになっています。
アプリを開いてピン操作を再試行した後、バックグラウンド タスクが再開されませんでした。
これは、App Hub で見た 2 つのクラッシュ レポートに関連している可能性があると思われます。
問題関数: Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr
例外の種類: ArgumentException
スタックトレース:
フレーム イメージ関数オフセット
0 coredll.dll xxx_RaiseException 19
1 mscoree3_7.dll WatsonUnhandledManagedException 296
2 mscoree3_7.dll Dbg_NotifyManagedException 93
3 mscoree3_7.dll FirstPassException 1044
4 TransitionStub 0
5 Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr 248
6 Microsoft.Phone.Scheduler.SystemNotificationInterop.GetNotificationByID 156
7 Microsoft.Phone.Scheduler.ScheduledActionService.Find 276
8 MyApp.Agents.TaskIsActive 60
9 MyApp.MainPage.SetupApplicationBar 44
10 MyApp.MainPage.MainPage_Loaded 100
11 MS.Internal.CoreInvokeHandler。 InvokeEventHandler 3660
12 MS.Internal.JoltHelper.FireEvent 1348
13 mscoree3_7.dll IL_CallManaged 884
14 mscoree3_7.dll IL_CallDelegateInternal 176
15 mscoree3_7.dll makeComPlusCall 5255
16 mscoree3_7.dll makeComPlusCallReturnInt 21
17 0
18 agcore.dll CCoreServices::CLR_FireEvent 385
Microsoft.Phone.Scheduler.ScheduledActionService.Find を呼び出すと、ArgumentException が発生します。
Find メソッドを呼び出している name パラメータは から取得されているprivate const string
ため、値は各呼び出しで同じになります。
この例外をキャッチして、バックグラウンド エージェントが存在しない、またはエージェントに問題があることを示していると想定する必要がありますか?
この段階では、エミュレーターでアプリを実行するときに例外を再現できません。
「バックグラウンド エージェントが 2 回連続してクラッシュすると、スケジュールから削除されます」
次のように、すべての呼び出しで ScheduledAgent を意図的にクラッシュさせようとしました。
protected override void OnInvoke(ScheduledTask task)
{
UpdateTile();
#if DEBUG
// If we're debugging, fire the task again
ScheduledActionService.LaunchForTest("MyScheduledTaskAgent", new TimeSpan(0, 0, 30));
throw new Exception("Bang");
#endif
NotifyComplete();
}
これにより、バックグラウンド タスクが 2 回の呼び出し後にエミュレーターの設定でオフになります。ただし、ScheduledActionService.Find へのアプリ呼び出しを再度開くと、例外なく機能します。失敗した PeriodicTask を削除して、問題なく新しいインスタンスを追加することもできます。
「電話の設定でバックグラウンドエージェントが無効になっていると、例外がスローされる可能性があります。その場合、ScheduledActionService.Findではなく、ScheduledActionService.Addで例外がスローされると思います」
エミュレータでこれを試しました。から次の例外が発生しScheduledActionService.Add(task);
ます。
System.InvalidOperationException - 「BNS エラー: アクションは無効です\r\n」
ScheduledActionService.Find の呼び出しは引き続き正常に機能します。