Tengo una aplicación de Windows Phone 7 desplegada en el mercado que actualiza su Live Tile a través de un Agente de fondo PeriodicTask.ScheduledActionService.Find lanza ArgumentException
Un usuario informa problemas con el mosaico que ya no se actualiza después de que ha estado funcionando durante algún tiempo.
Cuando verifican las tareas en segundo plano en el teléfono, se desactivan y la casilla de verificación "Volver a activar las tareas en segundo plano para esta aplicación la próxima vez que la abro" está marcada.
Después de abrir la aplicación y probar la operación de pin otra vez, la tarea en segundo plano no se ha reanudado.
Sospecho que esto puede estar relacionado con dos informes de fallos que he visto en la 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
llamadas a Microsoft.Phone.Scheduler.ScheduledActionService.Find están dando lugar a una excepción ArgumentException.
El parámetro de nombre que estoy llamando al método Buscar proviene de un private const string
por lo que el valor será el mismo con cada llamada.
¿Debo detectar esta excepción y asumir que el agente de fondo no está presente o indica que algo anda mal con el agente?
En esta etapa no puedo reproducir la excepción cuando ejecuto la aplicación en el emulador.
"When [the] Background Agent crashes two times in sequence, it's removed from scheduling"
He intentado estrellarse deliberadamente el ScheduledAgent en cada llamada de la siguiente manera:
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();
}
Esto causa la tarea de fondo para desactivar en la configuración en el emulador después de dos invocaciones. Sin embargo, si vuelvo a abrir las llamadas de la aplicación al servicio ScheduledActionService.Find sin una excepción. También puedo eliminar la PeriodicTask fallida y agregar una nueva instancia sin problema.
"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"
yo probamos este en el emulador. Me da la siguiente excepción de ScheduledActionService.Add(task);
:
System.InvalidOperationException - "Error BNS: La acción está desactivado \ r \ n"
llamadas a ScheduledActionService.Find todavía funciona bien.
"En este momento no puedo reproducir la excepción al ejecutar la aplicación en el emulador". Sé que se puede lanzar una excepción cuando el agente de fondo está desactivado en la configuración del teléfono. Creo que en ese caso la excepción se lanza sobre 'ScheduledActionService.Add', no' ScheduledActionService.Find', pero deberías intentarlo. –
Cuando 'Background Agent' se bloquea dos veces en secuencia, se elimina de la programación. Tal vez algunas excepciones son throwns aquí que causan este comportamiento ... – Ku6opr
@ Ku6opr, gracias por la sugerencia. Lo intenté y actualicé la pregunta con los resultados. No parece ser la causa. –