Compartilhar via


Tarefas em segundo plano e gatilhos personalizados

As tarefas em segundo plano são um método em Windows 10 para executar o código em segundo plano. Eles fazem parte da plataforma de aplicativo padrão e, essencialmente, fornecem a um aplicativo a capacidade de se registrar para um evento do sistema (gatilho) e, quando esse evento ocorre, execute um bloco de código predefinido em segundo plano. Os gatilhos do sistema incluem eventos como alterações na conectividade de rede ou no fuso horário do sistema.

Em algumas circunstâncias, os gatilhos do sistema fornecidos não são suficientes para lidar com cenários de parceiros. A partir Windows 10 versão 1803, para dar aos parceiros mais flexibilidade e permitir o uso de tarefas em segundo plano para mais circunstâncias, os parceiros podem criar gatilhos personalizados para os quais os aplicativos podem se registrar. Os gatilhos personalizados são definidos em um driver de dispositivo e podem ser usados para gerar eventos para qualquer condição de hardware desejada. Quando o gatilho personalizado é acionado, seu aplicativo pode executar uma tarefa em segundo plano exatamente da mesma maneira que o modelo de aplicativo padrão.

Implementando um gatilho personalizado

Há duas etapas para implementar um gatilho personalizado. Especificamente, o gatilho deve ser definido e gerado dentro de um driver de dispositivo ou serviço do sistema e um aplicativo com uma tarefa em segundo plano deve ser criado.

Criando o gatilho personalizado

Um gatilho personalizado é definido e gerado em um driver de dispositivo ou serviço nativo por meio da função RtlRaiseCustomSystemEventTrigger . Em seguida, ele pode ser registrado em um aplicativo universal e usado para iniciar uma tarefa em segundo plano da mesma maneira que um gatilho definido pelo sistema.

O trecho de código a seguir ilustra como gerar um gatilho personalizado.

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

No exemplo de código acima, o GUID passado como um parâmetro para a função RtlRaiseCustomSystemEventTrigger define o identificador do gatilho para o qual o aplicativo será registrado ao criar a tarefa em segundo plano. Esse identificador deve ser exclusivo.

Criando uma tarefa em segundo plano

Criar uma tarefa em segundo plano e registrá-la para um gatilho personalizado é muito semelhante ao processo usado para tarefas em segundo plano que funcionam com os gatilhos do sistema padrão.

  1. Comece criando um aplicativo UWP.

  2. Defina a tarefa em segundo plano no arquivo de manifesto do aplicativo, conforme mostrado no exemplo a seguir. Observe que o atributo Type do elemento Task está definido como "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. Registre o aplicativo para escutar o gatilho personalizado que você criou, conforme mostrado no trecho de código a seguir. Observe que a cadeia de caracteres usada ao instanciar o CustomSystemEventTrigger deve corresponder ao GUID usado ao criar o gatilho em seu driver de dispositivo ou serviço nativo.

    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. Crie a tarefa em segundo plano, conforme mostrado no trecho de código a seguir.

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

Para obter diretrizes adicionais sobre como criar, configurar e trabalhar com tarefas e gatilhos em segundo plano, consulte Início Rápido: Criar e registrar uma tarefa em segundo plano.