Registrieren von Gruppen-Hintergrundaufgaben

Wichtige APIs

BackgroundTaskRegistrationGroup-Klasse

Hintergrundaufgaben können jetzt in einer Gruppe registriert werden, die Sie sich als logischen Namespace vorstellen können. Durch diese Isolierung wird sichergestellt, dass verschiedene Komponenten einer Anwendung oder verschiedene Bibliotheken sich nicht gegenseitig bei der Registrierung von Hintergrundaufgaben behindern.

Wenn eine Anwendung und das von ihr verwendete Framework (oder die Bibliothek) eine Hintergrundaufgabe mit demselben Namen registrieren, könnte die Anwendung versehentlich die Registrierungen des Frameworks für Hintergrundaufgaben entfernen. App-Autoren könnten auch versehentlich Framework- und Bibliotheks-Hintergrundaufgabenregistrierungen entfernen, da sie alle registrierten Hintergrundaufgaben mit BackgroundTaskRegistration.AllTasks abmelden könnten. Mit Gruppen können Sie die Registrierung von Hintergrundaufgaben isolieren, damit dies nicht passiert.

Merkmale von Gruppen

  • Gruppen können durch eine GUID eindeutig identifiziert werden. Sie können auch einen zugehörigen Friendly Name String haben, der bei der Fehlersuche leichter zu lesen ist.
  • In einer Gruppe können mehrere Hintergrundaufgaben registriert werden.
  • In einer Gruppe registrierte Hintergrundaufgaben werden nicht in BackgroundTaskRegistration.AllTasks angezeigt. Daher werden Anwendungen, die derzeit BackgroundTaskRegistration.AllTasks verwenden, um die Registrierung ihrer Aufgaben aufzuheben, nicht versehentlich die Registrierung von in einer Gruppe registrierten Hintergrundaufgaben aufheben. Siehe Aufhebung der Registrierung von Hintergrundaufgaben in einer Gruppe unten, um zu sehen, wie alle Hintergrundauslöser, die als Teil einer Gruppe registriert wurden, aufgehoben werden können.
  • Jede Hintergrundaufgabenregistrierung hat eine Gruppeneigenschaft, mit der bestimmt wird, welcher Gruppe sie zugeordnet ist.
  • Die Registrierung von In-Process-Hintergrundaufgaben mit einer Gruppe führt dazu, dass die Aktivierung über das Ereignis BackgroundTaskRegistrationGroup.BackgroundActivated anstelle von Application.OnBackgroundActivated erfolgt.

Registrierung einer Hintergrundaufgabe in einer Gruppe

Im Folgenden wird gezeigt, wie Sie eine Hintergrundaufgabe (in diesem Beispiel ausgelöst durch eine Zeitzonenänderung) als Teil einer Gruppe registrieren.

private const string groupFriendlyName = "myGroup";
private const string groupId = "3F2504E0-4F89-41D3-9A0C-0305E82C3301";
private const string myTaskName = "My Background Trigger";

public static void RegisterBackgroundTaskInGroup()
{
   BackgroundTaskRegistrationGroup group = BackgroundTaskRegistration.GetTaskGroup(groupId);
   bool isTaskRegistered = false;

   // See if this task already belongs to a group
   if (group != null)
   {
       foreach (var taskKeyValue in group.AllTasks)
       {
           if (taskKeyValue.Value.Name == myTaskName)
           {
               isTaskRegistered = true;
               break;
           }
       }
   }

   // If the background task is not in a group, register it
   if (!isTaskRegistered)
   {
       if (group == null)
       {
           group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
       }

       var builder = new BackgroundTaskBuilder();
       builder.Name = myTaskName;
       builder.TaskGroup = group; // we specify the group, here
       builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));

       // Because builder.TaskEntryPoint is not specified, OnBackgroundActivated() will be raised when the background task is triggered
       BackgroundTaskRegistration task = builder.Register();
   }
}

Aufhebung der Registrierung von Hintergrundaufgaben in einer Gruppe

Im Folgenden wird gezeigt, wie Sie die Registrierung von Hintergrundaufgaben, die als Teil einer Gruppe registriert wurden, aufheben. Da in einer Gruppe registrierte Hintergrundaufgaben nicht in BackgroundTaskRegistration.AllTasks angezeigt werden, müssen Sie die Gruppen durchlaufen, die in jeder Gruppe registrierten Hintergrundaufgaben finden und deren Registrierung aufheben.

private static void UnRegisterAllTasks()
{
    // Unregister tasks that are part of a group
    foreach (var groupKeyValue in BackgroundTaskRegistration.AllTaskGroups)
    {
        foreach (var groupedTask in groupKeyValue.Value.AllTasks)
        {
            groupedTask.Value.Unregister(true); // passing true to cancel currently running instances of this background task
        }
    }

    // Unregister tasks that aren't part of a group
    foreach(var taskKeyValue in BackgroundTaskRegistration.AllTasks)
    {
        taskKeyValue.Value.Unregister(true); // passing true to cancel currently running instances of this background task
    }
}

Persistente Ereignisse registrieren

Bei der Verwendung von Hintergrundaufgaben-Registrierungsgruppen mit prozessinternen Hintergrundaufgaben werden die Hintergrundaktivierungen auf das Ereignis der Gruppe statt auf das Ereignis der Anwendung oder des CoreApplication-Objekts gerichtet. Dies ermöglicht es mehreren Komponenten innerhalb Ihrer Anwendung, die Aktivierung zu handhaben, anstatt alle Aktivierungscodepfade im Anwendungsobjekt zu platzieren. Im Folgenden wird gezeigt, wie Sie sich für das Ereignis „Hintergrundaktivierung“ der Gruppe anmelden. Prüfen Sie zunächst BackgroundTaskRegistration.GetTaskGroup um festzustellen, ob die Gruppe bereits registriert wurde. Wenn nicht, dann erstellen Sie eine neue Gruppe mit Ihrer Kennung und einem freundlichen Namen. Registrieren Sie dann einen Ereignishandler für das Ereignis BackgroundActivated der Gruppe.

void RegisterPersistentEvent()
{
    var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
    if (group == null)
    {
        group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
    }

    group.BackgroundActivated += MyEventHandler;
}