ScheduledActionService.Find löst eine ArgumentException aus

Ich habe eine auf dem Markt bereitgestellte Windows Phone 7-App, die ihre Live Tile über einen PeriodicTask-Hintergrundagenten aktualisiert.

Ein Benutzer meldet Probleme, bei denen die Kachel nach einiger Zeit nicht mehr aktualisiert wird.

Wenn sie die Hintergrundaufgaben auf dem Telefon überprüfen, ist sie deaktiviert und das Kontrollkästchen "Hintergrundaufgaben für diese Anwendung beim nächsten Öffnen wieder aktivieren" ist aktiviert.

Nach dem Öffnen der App und erneutem Ausführen der PIN-Operation wurde die Hintergrundaufgabe nicht fortgesetzt.

Ich vermute, dass dies mit zwei Absturzberichten zusammenhängt, die ich im App Hub gesehen habe:

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

Ausnahmetyp: 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

Aufrufe von Microsoft.Phone.Scheduler.ScheduledActionService.Find führen zu einer ArgumentException.

Der Name-Parameter, mit dem ich die Find-Methode aufrufe, stammt von aprivate const string Daher ist der Wert bei jedem Aufruf derselbe.

Sollte ich diese Ausnahme einfach abfangen und davon ausgehen, dass der Hintergrundagent nicht vorhanden ist, oder deutet dies darauf hin, dass mit dem Agenten etwas nicht stimmt?

Zum jetzigen Zeitpunkt kann ich die Ausnahme nicht reproduzieren, wenn ich die App im Emulator starte.

"Wenn [der] Hintergrundagent zweimal nacheinander abstürzt, wird er aus der Planung entfernt."

Ich habe absichtlich versucht, den ScheduledAgent bei jedem Aufruf wie folgt zum Absturz zu bringen:

<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>

Dies führt dazu, dass die Hintergrundaufgabe nach zwei Aufrufen unter den Einstellungen im Emulator deaktiviert wird. Wenn ich jedoch die App erneut öffne, funktionieren die Aufrufe von ScheduledActionService.Find ohne Ausnahme. Ich kann auch die fehlgeschlagene PeriodicTask entfernen und ohne Probleme eine neue Instanz hinzufügen.

"Eine Ausnahme kann ausgelöst werden, wenn der Hintergrundagent in den Einstellungen des Telefons deaktiviert ist. Ich denke, in diesem Fall wird die Ausnahme auf ScheduledActionService.Add und nicht auf ScheduledActionService.Find ausgelöst."

Ich habe das im Emulator versucht. Ich erhalte die folgende Ausnahme vonScheduledActionService.Add(task);:

System.InvalidOperationException - "BNS-Fehler: Die Aktion ist deaktiviert \ r \ n"

Aufrufe von ScheduledActionService.Find funktionieren weiterhin einwandfrei.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage