Créer et inscrire une tâche en arrière-plan in-processCreate and register an in-process background task

API importantesImportant APIs

Cette rubrique explique comment créer et inscrire une tâche en arrière-plan qui s’exécute dans le même processus que votre application.This topic demonstrates how to create and register a background task that runs in the same process as your app.

Les tâches en arrière-plan in-process sont plus faciles à implémenter que les tâches en arrière-plan hors processus.In-process background tasks are simpler to implement than out-of-process background tasks. Toutefois, elles sont moins résilientes.However, they are less resilient. Un blocage du code en cours d’exécution dans une tâche en arrière-plan in-process entraînera le blocage de votre application.If the code running in an in-process background task crashes, it will take down your app. Notez également que les déclencheurs DeviceUseTrigger, DeviceServicingTrigger et IoTStartupTask ne peuvent pas être utilisés avec le modèle in-process.Also note that DeviceUseTrigger, DeviceServicingTrigger and IoTStartupTask cannot be used with the in-process model. Vous ne pourrez pas non plus activer une tâche VoIP en arrière-plan au sein de votre application.Activating a VoIP background task within your application is also not possible. Ces tâches et ces déclencheurs peuvent néanmoins être utilisés avec le modèle de tâche en arrière-plan hors processus.These triggers and tasks are still supported using the out-of-process background task model.

N’oubliez pas que l’activité en arrière-plan peut être arrêtée, même en cas d’exécution au sein du processus au premier plan de l’application, si elle s’exécute au-delà des limites de durée d’exécution.Be aware that background activity can be terminated even when running inside the app's foreground process if it runs past execution time limits. La résilience obtenue grâce à la répartition des tâches dans une tâche en arrière-plan qui s’exécute dans un processus distinct reste utile pour plusieurs raisons.For some purposes the resiliency of separating work into a background task that runs in a separate process is still useful. Dissocier la tâche en arrière-plan de l’application au premier plan peut être la meilleure option pour les tâches pour lesquelles aucune communication avec l’application au premier plan n’est requise.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.

Notions de baseFundamentals

Le modèle in-process améliore le cycle de vie de l’application grâce à des notifications avancées qui vous indiquent quand votre application est au premier plan ou en arrière-plan.The in-process model enhances the application lifecycle with improved notifications for when your app is in the foreground or in the background. Deux nouveaux événements sont disponibles à partir de l’objet application pour ces transitions : EnteredBackground et LeavingBackground.Two new events are available from the Application object for these transitions: EnteredBackground and LeavingBackground. Ces événements s’intègrent au cycle de vie de l’application en fonction de l’état de visibilité de votre application. Pour en savoir plus sur ces événements et comment ils affectent le cycle de vie de l’application, consultez la rubrique Cycle de vie de l’application.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.

En règle générale, vous gérerez l’événement EnteredBackground pour exécuter le code lorsque votre application s’exécute en arrière-plan, et l’événement LeavingBackground pour savoir quand votre application est passée au premier plan.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.

Inscrire votre déclencheur de tâche en arrière-planRegister your background task trigger

L’inscription d’une activité en arrière-plan in-process est similaire à celle d’une activité en arrière-plan hors processus.In-process background activity is registered much the same as out-of-process background activity. Pour tous les déclencheurs en arrière-plan, l’inscription fait appel à l’élément BackgroundTaskBuilder.All background triggers start with registration using the BackgroundTaskBuilder. Le générateur permet d’inscrire facilement une tâche en arrière-plan en définissant toutes les valeurs requises au même endroit :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();

Notes

Les applications Windows universelles doivent appeler RequestAccessAsync avant d’inscrire l’un des types de déclencheurs d’arrière-plan.Universal Windows apps must call RequestAccessAsync before registering any of the background trigger types. Pour vous assurer que votre application Windows universelle continue de s’exécuter correctement après la publication d’une mise à jour, vous devez appeler RemoveAccess, puis RequestAccessAsync lorsque votre application est lancée après avoir été mise à jour.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. Pour plus d’informations, voir Recommandations en matière de tâches en arrière-plan.For more information, see Guidelines for background tasks.

Pour les activités en arrière-plan in-process, vous ne définissez pas TaskEntryPoint.. En laissant ce champ vide, vous activez le point d’entrée par défaut, une nouvelle méthode protégée sur l’objet Application appelé 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().

Une fois le déclencheur inscrit, il se déclenchera en fonction du type de déclencheur défini dans la méthode SetTrigger.Once a trigger is registered, it will fire based on the type of trigger set in the SetTrigger method. L’exemple ci-dessus utilise un déclencheur TimeTrigger qui se déclenchera quinze minutes après son inscription.In the example above a TimeTrigger is used, which will fire fifteen minutes from the time it was registered.

Ajouter une condition pour définir à quel moment votre tâche sera exécutée (facultatif)Add a condition to control when your task will run (optional)

Vous pouvez ajouter une condition pour définir à quel moment votre tâche sera exécutée après que l’événement de déclencheur est survenu.You can add a condition to control when your task will run after the trigger event occurs. Par exemple, si vous ne souhaitez pas que la tâche s’exécute tant que l’utilisateur n’est pas présent, appliquez la condition UserPresent.For example, if you don't want the task to run until the user is present, use the condition UserPresent. Pour obtenir la liste des conditions possibles, consultez SystemConditionType.For a list of possible conditions, see SystemConditionType.

L’exemple de code suivant affecte une condition qui exige la présence de l’utilisateur :The following sample code assigns a condition requiring the user to be present:

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

Placer votre code d’activité en arrière-plan dans OnBackgroundActivated()Place your background activity code in OnBackgroundActivated()

Placez votre code d’activité en arrière-plan dans OnBackgroundActivated pour répondre à votre déclencheur d’arrière-plan lorsqu’il est déclenché.Put your background activity code in OnBackgroundActivated to respond to your background trigger when it fires. OnBackgroundActivated peut être traité comme IBackgroundTask. Run.OnBackgroundActivated can be treated just like IBackgroundTask.Run. La méthode a un paramètre BackgroundActivatedEventArgs , qui contient toutes les caractéristiques de la méthode Run .The method has a BackgroundActivatedEventArgs parameter, which contains everything that the Run method delivers. Par exemple, dans 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);  
  }
}

Pour obtenir un exemple OnBackgroundActivated plus riche, consultez convertir un app service pour qu’il s’exécute dans le même processus que son application hôte.For a richer OnBackgroundActivated example, see Convert an app service to run in the same process as its host app.

Gérer la progression et l’achèvement des tâches en arrière-planHandle background task progress and completion

La progression et l’achèvement des tâches peuvent être surveillés de la même manière que pour les tâches en arrière-plan à plusieurs processus (voir Surveiller la progression et l’achèvement des tâches en arrière-plan), mais vous découvrirez sans doute un moyen encore plus facile de le faire en utilisant des variables pour suivre l’état d’avancement ou d’achèvement dans votre application.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. C’est l’un des avantages d’exécuter votre code d’activité en arrière-plan dans le même processus que votre application.This is one of the advantages of having your background activity code running in the same process as your app.

Gérer l’annulation des tâches en arrière-planHandle background task cancellation

Le processus d’annulation des tâches en arrière-plan in-process est le même que pour les tâches en arrière-plan hors processus (voir Gérer une tâche en arrière-plan annulée).In-process background tasks are cancelled the same way as out-of-process background tasks are (see Handle a cancelled background task). Notez que votre gestionnaire d’événements BackgroundActivated doit être fermé avant l’annulation pour éviter l’arrêt de tout le processus.Be aware that your BackgroundActivated event handler must exit before the cancellation occurs, or the whole process will be terminated. Si votre application au premier plan se ferme de façon inattendue lorsque vous annulez la tâche en arrière-plan, assurez-vous que votre gestionnaire s’est fermé avant l’annulation.If your foreground app closes unexpectedly when you cancel the background task, verify that your handler exited before the cancellation occured.

Le manifesteThe manifest

Contrairement aux tâches en arrière-plan hors processus, vous n’avez pas besoin d’ajouter des informations sur la tâche en arrière-plan dans le manifeste du package pour exécuter les tâches en arrière-plan in-process.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.

Résumé et étapes suivantesSummary and next steps

Vous devriez maintenant connaître les principes de l’écriture d’une tâche en arrière-plan in-process.You should now understand the basics of how to write a in-process background task.

Consultez les rubriques connexes suivantes pour obtenir des informations de référence sur les API, des recommandations conceptuelles pour les tâches en arrière-plan, ainsi que des instructions plus détaillées pour écrire des applications qui utilisent des tâches en arrière-plan.See the following related topics for API reference, background task conceptual guidance, and more detailed instructions for writing apps that use background tasks.

Rubriques d’instructions détaillées sur les tâches en arrière-planDetailed background task instructional topics

Recommandations en matière de tâches en arrière-planBackground task guidance

Informations de référence d’API de tâche en arrière-planBackground Task API Reference