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.