ScheduledActionService.Find zgłasza ArgumentException

Mam wdrożoną aplikację Windows Phone 7 na rynku, która aktualizuje Live Tile poprzez PeriodicTask Background Agent.

Jeden użytkownik zgłasza problemy z płytką, która nie jest już aktualizowana po pewnym czasie działania.

Gdy sprawdzają zadania w tle na telefonie, jest ono wyłączone i zaznaczone jest pole wyboru „Włącz ponownie zadania w tle dla tej aplikacji przy następnym otwarciu”.

Po otwarciu aplikacji i ponownym uruchomieniu operacji przypinania zadanie w tle nie zostało wznowione.

Podejrzewam, że może to być związane z dwoma raportami o awariach, które widziałem w centrum aplikacji:

Problem Funkcja: Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr

Typ wyjątku: ArgumentException

Ślad stosu:

Przesunięcie funkcji obrazu klatki
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

Wywołania do Microsoft.Phone.Scheduler.ScheduledActionService.Find powodują wyjątek ArgumentException.

Parametr name, który nazywam metodą Find, pochodzi z aprivate const string więc wartość będzie taka sama przy każdym wywołaniu.

Czy powinienem po prostu złapać ten wyjątek i założyć, że agent w tle nie jest obecny, czy też wskazuje, że coś jest nie tak z agentem?

Na tym etapie nie mogę odtworzyć wyjątku podczas uruchamiania aplikacji w emulatorze.

„Gdy [Agent] w tle ulegnie awarii dwa razy w kolejności, zostanie usunięty z harmonogramu”

Próbowałem rozmyślnie zawiesić ScheduledAgent przy każdym wywołaniu w następujący sposób:

<code>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();
}
</code>

Powoduje to wyłączenie zadania w tle w ustawieniach emulatora po dwóch wywołaniach. Jeśli jednak ponownie otworzę wywołania aplikacji na ScheduledActionService.Find, pracuj bez wyjątku. Mogę także usunąć nieudany PeriodicTask i dodać nową instancję bez problemu.

"wyjątek może zostać zgłoszony, gdy agent w tle jest dezaktywowany w ustawieniach telefonu. Myślę, że w takim przypadku wyjątek jest zgłaszany na ScheduledActionService.Add, a nie ScheduledActionService.Find"

Próbowałem tego w emulatorze. Otrzymuję następujący wyjątekScheduledActionService.Add(task);:

System.InvalidOperationException - „Błąd BNS: akcja jest wyłączona

Wywołania do ScheduledActionService.Find nadal działają poprawnie.

questionAnswers(1)

yourAnswerToTheQuestion