Créer et inscrire une tâche en arrière-plan in-process

API importantes

Cette rubrique montre comment créer et inscrire une tâche en arrière-plan qui s’exécute dans le même processus que votre application.

Les tâches en arrière-plan en cours sont plus simples à implémenter que les tâches en arrière-plan hors processus. Toutefois, elles sont moins résilientes. Si le code en cours d’exécution dans une tâche en arrière-plan in-process se bloque, il enlève votre application. Notez également que DeviceUseTrigger, DeviceServicingTrigger et IoTStartupTask ne peuvent pas être utilisés avec le modèle in-process. L’activation d’une tâche en arrière-plan VoIP au sein de votre application n’est pas possible. Ces déclencheurs et tâches sont toujours pris en charge à l’aide du modèle de tâche en arrière-plan hors processus.

N’oubliez pas que l’activité en arrière-plan peut être arrêtée même lors de l’exécution à l’intérieur du processus de premier plan de l’application si elle dépasse les limites de temps d’exécution. À certaines fins, la résilience de la séparation du travail en une tâche en arrière-plan qui s’exécute dans un processus distinct est toujours utile. La conservation du travail en arrière-plan en tant que tâche distincte de l’application de premier plan peut être la meilleure option pour le travail qui ne nécessite pas de communication avec l’application de premier plan.

Notions de base

Le modèle in-process améliore le cycle de vie de l’application avec des notifications améliorées lorsque votre application est au premier plan ou en arrière-plan. Deux nouveaux événements sont disponibles à partir de l’objet Application pour ces transitions : EnteredBackground et LeavingBackground. Ces événements s’intègrent dans le cycle de vie de l’application en fonction de l’état de visibilité de votre application En savoir plus sur ces événements et leur impact sur le cycle de vie de l’application au niveau du cycle de vie de l’application.

À un niveau élevé, vous allez gérer l’événement EnteredBackground pour exécuter votre code qui s’exécute pendant l’exécution de votre application en arrière-plan et gérer LeavingBackground pour savoir quand votre application a été déplacée au premier plan.

Inscrire votre déclencheur de tâche en arrière-plan

L’activité en arrière-plan in-process est inscrite de la même façon que l’activité en arrière-plan hors processus. Tous les déclencheurs en arrière-plan commencent par l’inscription à l’aide de BackgroundTaskBuilder. Le générateur facilite l’inscription d’une tâche en arrière-plan en définissant toutes les valeurs requises à un seul endroit :

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();

Remarque

Les applications Windows universelles doivent appeler RequestAccessAsync avant d’inscrire l’un des types de déclencheurs en arrière-plan. Pour vous assurer que votre application Windows universelle continue de s’exécuter correctement après avoir publié une mise à jour, vous devez appeler RemoveAccess, puis appeler RequestAccessAsync lorsque votre application démarre après avoir été mise à jour. Pour plus d’informations, consultez Instructions pour les tâches en arrière-plan.

Pour les activités en arrière-plan in-process que vous ne définissez TaskEntryPoint. pas en laissant vide, le point d’entrée par défaut est activé, une nouvelle méthode protégée sur l’objet Application appelé OnBackgroundActivated().

Une fois qu’un déclencheur est inscrit, il se déclenche en fonction du type de déclencheur défini dans la méthode SetTrigger . Dans l’exemple ci-dessus, un TimeTrigger est utilisé, ce qui déclenche quinze minutes à partir du moment où il a été inscrit.

Ajouter une condition pour contrôler quand votre tâche s’exécutera (facultatif)

Vous pouvez ajouter une condition pour contrôler quand votre tâche s’exécutera après l’événement de déclencheur. Par exemple, si vous ne souhaitez pas que la tâche s’exécute tant que l’utilisateur n’est pas présent, utilisez la condition UserPresent. Pour obtenir la liste des conditions possibles, consultez SystemConditionType.

L’exemple de code suivant affecte une condition exigeant que l’utilisateur soit présent :

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

Placez votre code d’activité en arrière-plan dans OnBackgroundActivated()

Placez votre code d’activité en arrière-plan dans OnBackgroundActivated pour répondre à votre déclencheur d’arrière-plan lorsqu’il se déclenche. OnBackgroundActivated peut être traité comme IBackgroundTask.Run. La méthode a un paramètre BackgroundActivatedEventArgs , qui contient tout ce que la méthode Run fournit. Par exemple, dans 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 service d’application à exécuter dans le même processus que son application hôte.

Gérer la progression et l’achèvement des tâches en arrière-plan

La progression et l’achèvement des tâches peuvent être supervisées de la même façon que pour les tâches en arrière-plan multiprocesseur (voir Surveiller la progression et l’achèvement des tâches en arrière-plan), mais vous constaterez probablement que vous pouvez les suivre plus facilement à l’aide de variables pour suivre l’état de progression ou d’achèvement dans votre application. Il s’agit de l’un des avantages de l’exécution de votre code d’activité en arrière-plan dans le même processus que votre application.

Gérer l’annulation des tâches en arrière-plan

Les tâches en arrière-plan en arrière-plan en cours sont annulées de la même façon que les tâches en arrière-plan hors processus (voir Gérer une tâche en arrière-plan annulée). N’oubliez pas que votre gestionnaire d’événements BackgroundActivated doit se quitter avant que l’annulation ne se produise, ou que l’ensemble du processus sera arrêté. Si votre application de premier plan se ferme de façon inattendue lorsque vous annulez la tâche en arrière-plan, vérifiez que votre gestionnaire s’est arrêté avant l’annulation.

Manifeste

Contrairement aux tâches en arrière-plan hors processus, vous n’êtes pas obligé d’ajouter des informations de tâche en arrière-plan au manifeste du package afin d’exécuter des tâches en arrière-plan in-process.

Résumé et étapes suivantes

Vous devez maintenant comprendre les principes fondamentaux de l’écriture d’une tâche en arrière-plan in-process.

Consultez les rubriques connexes suivantes pour obtenir des informations de référence sur l’API, des instructions conceptuelles sur les tâches en arrière-plan et des instructions plus détaillées sur l’écriture d’applications qui utilisent des tâches en arrière-plan.

Rubriques d’instructions détaillées sur les tâches en arrière-plan

Conseils sur les tâches en arrière-plan

Informations de référence sur l’API de tâche en arrière-plan