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

API importantes

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.

Les tâches en arrière-plan in-process sont plus faciles à implémenter que les tâches en arrière-plan hors processus. Toutefois, elles sont moins résilientes. 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. Notez également que les déclencheurs DeviceUseTrigger, DeviceServicingTrigger et IoTStartupTask ne peuvent pas être utilisés avec le modèle in-process. Vous ne pourrez pas non plus activer une tâche VoIP en arrière-plan au sein de votre application. 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.

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. 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. 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.

Fondamentaux

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. Deux nouveaux événements sont disponibles à partir de l’objet Application pour ces transitions : EnteredBackground et 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.

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.

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

L’inscription d’une activité en arrière-plan in-process est similaire à celle d’une activité en arrière-plan hors processus. Pour tous les déclencheurs en arrière-plan, l’inscription fait appel à l’élément 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 :

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. 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. Pour plus d’informations, voir Recommandations en matière de tâches en arrière-plan.

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

Une fois le déclencheur inscrit, il se déclenchera en fonction du type de déclencheur défini dans la méthode SetTrigger. L’exemple ci-dessus utilise un déclencheur TimeTrigger qui se déclenchera quinze minutes après son inscription.

Ajouter une condition pour définir à quel moment votre tâche sera exécutée (facultatif)

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. 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. Pour obtenir la liste des conditions possibles, consultez SystemConditionType.

L’exemple de code suivant affecte une condition qui exige la présence de l’utilisateur :

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

Placer 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 pour qu’il s’exécute 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 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. 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.

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

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). Notez que votre gestionnaire d’événements BackgroundActivated doit être fermé avant l’annulation pour éviter l’arrêt de tout le processus. 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.

Le manifeste

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.

Résumé et étapes suivantes

Vous devriez maintenant connaître les principes 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 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.

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

Recommandations en matière de tâches en arrière-plan

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