Ho un'app di Windows Phone 7 distribuita nel marketplace che aggiorna la sua Live Tile tramite un agente di background PeriodicTask.ScheduledActionService.Find getta ArgumentException
Un utente sta segnalando problemi con il riquadro che non si sta più aggiornando dopo che ha funzionato per un po 'di tempo.
Quando controllano le attività in background sul telefono è disabilitato e la casella di controllo su "Riapri le attività in background per questa applicazione alla successiva apertura" è selezionata.
Dopo aver aperto l'app e aver provato nuovamente l'operazione pin, l'attività in background non è stata ripristinata.
ho il sospetto che questo può essere correlato a due segnalazioni di crash che ho visto in App Hub:
Problem Function: Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr
Exception Type: ArgumentException
Stack Trace:
Frame Image Function Offset
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
chiamate ai Microsoft.Phone.Scheduler.ScheduledActionService.Find si traducono in un ArgumentException.
Il parametro nome con cui sto chiamando il metodo Find proviene da un private const string
in modo che il valore sia lo stesso per ogni chiamata.
Devo solo rilevare questa eccezione e presupporre che l'agente in background non sia presente o indichi che qualcosa non va nell'agente?
A questo punto non riesco a riprodurre l'eccezione durante l'esecuzione dell'app nell'emulatore.
"When [the] Background Agent crashes two times in sequence, it's removed from scheduling"
Ho provato deliberatamente schiantarsi lo ScheduledAgent ad ogni chiamata come segue:
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();
}
Questo provoca il compito di sfondo per spegnere nelle impostazioni nell'emulatore dopo due invocazioni. Tuttavia, se riapro l'app, le chiamate a ScheduledActionService.Find funzionano senza un'eccezione. Posso anche rimuovere il PeriodicTask fallito e aggiungere una nuova istanza senza problemi.
"an exception can be thrown when the background agent is deactivated in the phone's settings. I think in that case the exception is thrown on ScheduledActionService.Add, not ScheduledActionService.Find"
Ho provato questo nell'emulatore. Ottengo la seguente eccezione da ScheduledActionService.Add(task);
:
System.InvalidOperationException - "Errore BNS: L'azione è disattivata \ r \ n"
chiamate ai ScheduledActionService.Find funzionano ancora bene.
"A questo punto non riesco a riprodurre l'eccezione durante l'esecuzione dell'app nell'emulatore." So che un'eccezione può essere generata quando l'agente in background è disattivato nelle impostazioni del telefono. Penso che in questo caso l'eccezione sia lanciata su "ScheduledActionService.Add', non su" ScheduledActionService.Find', ma dovresti provarlo. –
Quando 'Background Agent' si arresta in modo anomalo due volte in sequenza, viene rimosso dalla pianificazione. Forse alcune eccezioni vengono lanciate qui che causano questo comportamento ... – Ku6opr
@ Ku6opr, grazie per il suggerimento. L'ho provato e ho aggiornato la domanda con i risultati. Non sembra essere la causa. –