Partager via


Tâches en arrière-plan et déclencheurs personnalisés

Les tâches en arrière-plan sont une méthode sur Windows 10 pour exécuter du code en arrière-plan. Ils font partie de la plateforme d’application standard et fournissent essentiellement à une application la possibilité de s’inscrire à un événement système (déclencheur) et, lorsque cet événement se produit, exécutent un bloc de code prédéfini en arrière-plan. Les déclencheurs système incluent des événements tels que les modifications apportées à la connectivité réseau ou au fuseau horaire système.

Dans certaines circonstances, les déclencheurs système fournis ne sont pas suffisants pour répondre aux scénarios de partenaires. À partir de Windows 10 version 1803, pour donner aux partenaires plus de flexibilité et permettre l’utilisation de tâches en arrière-plan dans d’autres circonstances, les partenaires peuvent créer des déclencheurs personnalisés auxquels les applications peuvent s’inscrire. Les déclencheurs personnalisés sont définis dans un pilote de périphérique et peuvent être utilisés pour déclencher des événements pour n’importe quelle condition matérielle que vous souhaitez. Lorsque le déclencheur personnalisé est déclenché, votre application peut exécuter une tâche en arrière-plan exactement de la même manière que le modèle d’application standard.

Implémentation d’un déclencheur personnalisé

Il existe deux étapes pour implémenter un déclencheur personnalisé. Plus précisément, le déclencheur doit être défini et déclenché dans un pilote de périphérique ou un service système, et une application avec une tâche en arrière-plan doit être créée.

Création du déclencheur personnalisé

Un déclencheur personnalisé est défini et déclenché dans un pilote de service ou de périphérique natif via la fonction RtlRaiseCustomSystemEventTrigger . Il peut ensuite être inscrit pour à partir d’une application universelle et utilisé pour lancer une tâche en arrière-plan de la même manière qu’un déclencheur défini par le système.

L’extrait de code suivant illustre comment déclencher un déclencheur personnalisé.

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

Dans l’exemple de code ci-dessus, le GUID passé en tant que paramètre à la fonction RtlRaiseCustomSystemEventTrigger définit l’identificateur du déclencheur pour lequel l’application s’inscrit lors de la création de la tâche en arrière-plan. Cet identificateur doit être unique.

Création d’une tâche en arrière-plan

La création d’une tâche en arrière-plan et son inscription pour un déclencheur personnalisé sont très similaires au processus utilisé pour les tâches en arrière-plan qui fonctionnent avec les déclencheurs système standard.

  1. Commencez par créer une application UWP.

  2. Définissez la tâche en arrière-plan dans le fichier manifeste de l’application, comme illustré dans l’exemple suivant. Notez que l’attribut Type de l’élément Task est défini sur "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. Inscrivez l’application pour écouter le déclencheur personnalisé que vous avez créé, comme indiqué dans l’extrait de code suivant. Notez que la chaîne utilisée lors de l’instanciation de CustomSystemEventTrigger doit correspondre au GUID utilisé lors de la création du déclencheur dans votre service ou pilote de périphérique natif.

    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. Créez la tâche en arrière-plan comme indiqué dans l’extrait de code suivant.

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

Pour obtenir des conseils supplémentaires sur la création, la configuration et l’utilisation de déclencheurs et de tâches en arrière-plan, consultez Démarrage rapide : Créer et inscrire une tâche en arrière-plan.