Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von ProzessenCreate and register an in-process background task

Wichtige APIsImportant APIs

In diesem Thema wird gezeigt, wie Sie eine Hintergrundaufgabe erstellen und registrieren, die im gleichen Prozess wie Ihre App ausgeführt wird.This topic demonstrates how to create and register a background task that runs in the same process as your app.

In-Process-Hintergrundaufgaben sind einfacher als Out-of-Process-Hintergrundaufgaben zu implementieren.In-process background tasks are simpler to implement than out-of-process background tasks. Sie sind jedoch weniger stabil.However, they are less resilient. Wenn der in einer in-Process-Hintergrundaufgabe ausgeführte Code abstürzt, wirkt sich dies auf Ihre App aus.If the code running in an in-process background task crashes, it will take down your app. Beachten Sie außerdem, dass DeviceUseTrigger, DeviceServicingTrigger und IoTStartupTask nicht mit dem In-Process-Modell verwendet werden können.Also note that DeviceUseTrigger, DeviceServicingTrigger and IoTStartupTask cannot be used with the in-process model. Zudem ist das Aktivieren einer VoIP-Hintergrundaufgabe innerhalb der Anwendung nicht möglich.Activating a VoIP background task within your application is also not possible. Diese Trigger und Aufgaben werden bei Verwendung des Out-of-Process-Hintergrundaufgabenmodells weiterhin unterstützt.These triggers and tasks are still supported using the out-of-process background task model.

Beachten Sie, dass Hintergrundaktivitäten auch bei Ausführung innerhalb des Vordergrundprozesses der App beendet werden können, wenn Ausführungszeitlimits überschritten werden.Be aware that background activity can be terminated even when running inside the app's foreground process if it runs past execution time limits. Für bestimmte Zwecke ist die Resilienz der Trennung von Arbeiten in eine Hintergrundaufgabe, die in einem separaten Prozess ausgeführt wird, weiterhin hilfreich.For some purposes the resiliency of separating work into a background task that runs in a separate process is still useful. Die Trennung von Hintergrundarbeiten als Aufgabe von der Vordergrundanwendung kann die beste Option für Arbeiten sein, die keine Kommunikation mit der Vordergrundanwendung erfordern.Keeping background work as a task separate from the foreground application may be the best option for work that does not require communication with the foreground application.

GrundlagenFundamentals

Das In-Process-Modell erweitert den Anwendungslebenszyklus um verbesserte Benachrichtigungen, wenn sich die App im Vordergrund oder im Hintergrund befindet.The in-process model enhances the application lifecycle with improved notifications for when your app is in the foreground or in the background. Zwei neue Ereignisse sind vom Anwendungsobjekt für diese Übergänge verfügbar: EnteredBackground und LeavingBackground.Two new events are available from the Application object for these transitions: EnteredBackground and LeavingBackground. Diese Ereignisse passen je nach Sichtbarkeitszustand der Anwendung in den Anwendungslebenszyklus. Weitere Informationen zu diesen Ereignissen und deren Auswirkungen auf den Anwendungslebenszyklus finden Sie unter App-Lebenszyklus.These events fit into the application lifecycle based on the visibility state of your application Read more about these events and how they affect the application lifecycle at App lifecycle.

Auf oberer Ebene behandeln Sie das EnteredBackground-Ereignis zum Ausführen von Code bei der Ausführung der App im Hintergrund und das LeavingBackground-Ereignis, um zu erfahren, wann Ihre App in den Vordergrund verschoben wurde.At a high level, you will handle the EnteredBackground event to run your code that will execute while your app is running in the background, and handle LeavingBackground to know when your app has moved to the foreground.

Registrieren des Triggers für die HintergrundaufgabeRegister your background task trigger

In-Process-Hintergrundaktivitäten werden ähnlich wie Out-of-Process-Hintergrundaktivitäten registriert.In-process background activity is registered much the same as out-of-process background activity. Alle Hintergrundtrigger werden mit der Registrierung mit BackgroundTaskBuilder gestartet.All background triggers start with registration using the BackgroundTaskBuilder. Der Generator vereinfacht die Registrierung einer Hintergrundaufgabe, indem alle erforderlichen Werte an einem zentralen Ort festlegt werden:The builder makes it easy to register a background task by setting all required values in one place:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

Hinweis

Universelle Windows-Apps müssen jedoch RequestAccessAsync aufrufen, bevor Hintergrundtrigger-Typen registriert werden.Universal Windows apps must call RequestAccessAsync before registering any of the background trigger types. Rufen Sie RemoveAccess und anschließend RequestAccessAsync auf, wenn die App nach der Aktualisierung gestartet wird, um sicherzustellen, dass Ihre universelle Windows-App nach der Veröffentlichung eines Updates weiterhin ordnungsgemäß ausgeführt wird.To ensure that your Universal Windows app continues to run properly after you release an update, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. Weitere Informationen finden Sie unter Richtlinien für Hintergrundaufgaben.For more information, see Guidelines for background tasks.

In-Process-Hintergrundaktivitäten erfolgen ohne das Festlegen von TaskEntryPoint. Bleibt dieser Wert leer, wird der Standardeinstiegspunkt aktiviert, eine neue geschützte Methode für das Application-Objekt namens OnBackgroundActivated().For in-process background activities you do not set TaskEntryPoint. Leaving it blank enables the default entry point, a new protected method on the Application object called OnBackgroundActivated().

Sobald ein Trigger registriert ist, wird er basierend auf dem in der SetTrigger-Methode festgelegten Triggertyp ausgelöst.Once a trigger is registered, it will fire based on the type of trigger set in the SetTrigger method. Im obigen Beispiel wird ein TimeTrigger verwendet, der 15 Minuten nach dem Registrierungszeitpunkt ausgelöst wird.In the example above a TimeTrigger is used, which will fire fifteen minutes from the time it was registered.

Hinzufügen einer Bedingung, die bestimmt, wann Ihre Aufgabe ausgeführt wird (optional)Add a condition to control when your task will run (optional)

Sie können eine Bedingung hinzufügen, die bestimmt, wann Ihre Aufgabe ausgeführt wird, nachdem das Auslöseereignis eintritt.You can add a condition to control when your task will run after the trigger event occurs. Wenn Sie zum Beispiel möchten, dass die Aufgabe erst ausgeführt wird, wenn der Benutzer anwesend ist, verwenden Sie die Bedingung UserPresent.For example, if you don't want the task to run until the user is present, use the condition UserPresent. Eine Liste mit möglichen Bedingungen finden Sie in SystemConditionType.For a list of possible conditions, see SystemConditionType.

Der folgende Beispielcode weist eine Bedingung zu, die die Anwesenheit des Benutzers voraussetzt:The following sample code assigns a condition requiring the user to be present:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Platzieren des Codes der Hintergrundaktivität in „OnBackgroundActivated()“Place your background activity code in OnBackgroundActivated()

Fügen Sie den Code für die Hintergrund Aktivität in onbackgroundaktivierte ein, um auf den Hintergrund-Triggers beim auslösen zu reagieren.Put your background activity code in OnBackgroundActivated to respond to your background trigger when it fires. " Onbackgroundaktivierte " kann genauso wie ibackgroundtask. Runbehandelt werden.OnBackgroundActivated can be treated just like IBackgroundTask.Run. Die-Methode verfügt über einen backgroundactivatedeventargs -Parameter, der alle Elemente enthält, die von der Run -Methode bereitstellt werden.The method has a BackgroundActivatedEventArgs parameter, which contains everything that the Run method delivers. Beispielsweise in app.XAML.cs:For example, in App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Ein umfassenderes onbackgroundaktiviertes Beispiel finden Sie unter Konvertieren eines App Service, um ihn in demselben Prozess wie die zugehörige Host-App auszuführen.For a richer OnBackgroundActivated example, see Convert an app service to run in the same process as its host app.

Behandeln des Status und Abschlusses von HintergrundaufgabenHandle background task progress and completion

Der Aufgabenstatus und -abschluss kann genauso wie bei Multiprozess-Hintergrundaufgaben überwacht werden (siehe Überwachen von Status und Durchführung von Hintergrundaufgaben). Wahrscheinlich stellen Sie jedoch fest, dass die Überwachung mithilfe von Variablen zum Nachverfolgen von Status oder Abschluss in Ihrer App einfacher ist.Task progress and completion can be monitored the same way as for multi-process background tasks (see Monitor background task progress and completion) but you will likely find that you can more easily track them by using variables to track progress or completion status in your app. Dies ist einer der Vorteile, wenn der Code der Hintergrundaktivität im selben Prozess wie Ihre App ausgeführt wird.This is one of the advantages of having your background activity code running in the same process as your app.

Behandeln des Abbruchs von HintergrundaufgabenHandle background task cancellation

In-Process-Hintergrundaufgaben werden auf die gleiche Weise abgebrochen wie Out-of-Process-Hintergrundaufgaben (siehe Behandeln einer abgebrochenen Hintergrundaufgabe).In-process background tasks are cancelled the same way as out-of-process background tasks are (see Handle a cancelled background task). Beachten Sie, dass der BackgroundActivated-Ereignishandler vor dem Abbruch beendet werden muss, oder der gesamte Prozess wird beendet.Be aware that your BackgroundActivated event handler must exit before the cancellation occurs, or the whole process will be terminated. Wenn die Vordergrund-App beim Abbrechen der Hintergrundaufgabe unerwartet geschlossen wird, überprüfen Sie, ob der Handler vor dem Abbruch beendet wurde.If your foreground app closes unexpectedly when you cancel the background task, verify that your handler exited before the cancellation occured.

Das ManifestThe manifest

Im Gegensatz zu Out-of-Process-Hintergrundaufgaben müssen Sie dem Paketmanifest keine Hintergrundaufgabeninformationen hinzufügen, um In-Process-Hintergrundaufgaben auszuführen.Unlike out-of-process background tasks, you are not required to add background task information to the package manifest in order to run in-process background tasks.

Zusammenfassung und nächste SchritteSummary and next steps

Sie sollten jetzt über die Grundlagen verfügen, um eine In-Process-Hintergrundaufgabe zu schreiben.You should now understand the basics of how to write a in-process background task.

Eine API-Referenz, konzeptionelle Richtlinien zu Hintergrundaufgaben und ausführlichere Anweisungen zum Schreiben von Apps, die Hintergrundaufgaben verwenden, finden Sie unter den folgenden verwandten Themen:See the following related topics for API reference, background task conceptual guidance, and more detailed instructions for writing apps that use background tasks.

Ausführliche Themen mit Anweisungen zu HintergrundaufgabenDetailed background task instructional topics

Ratschläge zu HintergrundaufgabenBackground task guidance

Hintergrundaufgabe – API-ReferenzBackground Task API Reference