Freigeben über


Hintergrundaufgaben und benutzerdefinierte Trigger

Hintergrundaufgaben sind eine Methode für Windows 10 zum Ausführen von Code im Hintergrund. Sie sind Teil der Standardanwendungsplattform und bieten einer App im Wesentlichen die Möglichkeit, sich für ein Systemereignis (Trigger) zu registrieren und wenn dieses Ereignis auftritt, einen vordefinierten Codeblock im Hintergrund auszuführen. Systemtrigger umfassen Ereignisse wie Änderungen der Netzwerkkonnektivität oder der Systemzeitzone.

Unter bestimmten Umständen reichen die bereitgestellten Systemtrigger nicht aus, um Partnerszenarien zu behandeln. Ab Windows 10 Version 1803 können Partner benutzerdefinierte Trigger erstellen, für die Apps registriert werden können, um Partnern mehr Flexibilität zu bieten und die Verwendung von Hintergrundaufgaben für weitere Umstände zu ermöglichen. Benutzerdefinierte Trigger werden innerhalb eines Gerätetreibers definiert und können verwendet werden, um Ereignisse für jede gewünschte Hardwarebedingung auszulösen. Wenn der benutzerdefinierte Trigger ausgelöst wird, kann Ihre App eine Hintergrundaufgabe genauso ausführen wie das Standard-App-Modell.

Implementieren eines benutzerdefinierten Triggers

Es gibt zwei Schritte zum Implementieren eines benutzerdefinierten Triggers. Insbesondere muss der Trigger innerhalb eines Gerätetreibers oder Systemdiensts definiert und ausgelöst werden, und eine App mit einer Hintergrundaufgabe muss erstellt werden.

Erstellen des benutzerdefinierten Triggers

Ein benutzerdefinierter Trigger wird in einem nativen Dienst oder Gerätetreiber über die RtlRaiseCustomSystemEventTrigger-Funktion definiert und ausgelöst. Er kann dann von einer universellen App aus registriert und verwendet werden, um eine Hintergrundaufgabe relativ auf die gleiche Weise wie ein systemdefinierter Trigger zu initiieren.

Der folgende Codeausschnitt veranschaulicht, wie ein benutzerdefinierter Trigger ausgelöst wird.

#define GUID_MY_CUSTOMSYSTEMEVENTTRIGGERID L"{9118718B-FF80-4AFE-BAF1-D88A4525F3AB}"

CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG triggerConfig;
CUSTOM_SYSTEM_EVENT_TRIGGER_INIT(&triggerConfig,
                                 GUID_MY_CUSTOMSYSTEMEVENTTRIGGERID);

NTSTATUS status = RtlRaiseCustomSystemEventTrigger(&triggerConfig);

Im obigen Codebeispiel definiert die GUID, die als Parameter an die Funktion RtlRaiseCustomSystemEventTrigger übergeben wird, den Bezeichner des Triggers, für den sich die App beim Erstellen der Hintergrundaufgabe registriert. Dieser Bezeichner muss eindeutig sein.

Erstellen einer Hintergrundaufgabe

Das Erstellen einer Hintergrundaufgabe und deren Registrierung für einen benutzerdefinierten Trigger ähnelt dem Prozess, der für Hintergrundaufgaben verwendet wird, die mit den Standardsystemtriggern arbeiten.

  1. Erstellen Sie zunächst eine UWP-App.

  2. Definieren Sie die Hintergrundaufgabe in der App-Manifestdatei, wie im folgenden Beispiel gezeigt. Beachten Sie, dass das Type-Attribut des Task-Elements auf festgelegt ist. "systemEvent"

    <Applications>
      <Application Id="MyBackgroundTaskSample.App" Executable="$targetnametoken$.exe" EntryPoint=" MyBackgroundTaskSample.App">
        <Extensions>
          <Extension Category="windows.backgroundTasks" EntryPoint="MyBackgroundTask.SampleBackgroundTask">
            <BackgroundTasks>
              <Task Type="systemEvent" />
            </BackgroundTasks>
          </Extension>
        </Extensions>
      </Application>
    </Applications>
    
  3. Registrieren Sie die App, um auf den benutzerdefinierten Trigger zu lauschen, den Sie erstellt haben, wie im folgenden Codeausschnitt gezeigt. Beachten Sie, dass die beim Instanziieren von CustomSystemEventTrigger verwendete Zeichenfolge mit der GUID übereinstimmen muss, die beim Erstellen des Triggers in Ihrem nativen Dienst oder Gerätetreiber verwendet wird.

    public void InitBackgroundTask()
    {
       // Create a new background task builder.
       BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
    
       // Create a new CustomSystemEvent trigger.
       var myTrigger = new CustomSystemEventTrigger(
                            "{9118718B-FF80-4AFE-BAF1-D88A4525F3AB}", //Trigger Identifier
                            CustomSystemEventTriggerRecurrence.Once); //OneShot 
    
       // Associate the CustomSystemEvent trigger with the background task builder.
       taskBuilder.SetTrigger(myTrigger);
    
       // Specify the background task to run when the trigger fires.
       taskBuilder.TaskEntryPoint = MyBackgroundTask.SampleBackgroundTask;
    
       // Name the background task.
       taskBuilder.Name = "fabrikam.audio-jack.connected Task";
    
       // Register the background task.
       BackgroundTaskRegistration taskRegistration = taskBuilder.Register();
    
       // Associate completed event handler with the new background task.
       taskRegistration.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); 
    }
    
  4. Erstellen Sie die Hintergrundaufgabe wie im folgenden Codeausschnitt gezeigt.

    namespace MyBackgroundTask
    {
       public sealed class SampleBackgroundTask : IBackgroundTask
       {
          // Called by the system when it's time to run our task
          public void Run(IBackgroundTaskInstance instance)
          {
             DoWork();
          }
       }
    }
    

Weitere Anleitungen zum Erstellen, Konfigurieren und Arbeiten mit Hintergrundaufgaben und Triggern finden Sie unter Schnellstart: Erstellen und Registrieren einer Hintergrundaufgabe.