Compartir a través de


Responder a eventos del sistema con tareas en segundo plano

API importantes

Aprende a crear una tarea en segundo plano que responda a eventos SystemTrigger.

En este tema se supone que tiene una clase de tarea en segundo plano escrita para la aplicación y que esta tarea debe ejecutarse en respuesta a un evento desencadenado por el sistema, como cuando cambia la disponibilidad de Internet o el usuario inicia sesión. Este tema se centra en la clase SystemTrigger. Puede encontrar más información sobre cómo escribir una clase de tarea en segundo plano en Crear y registrar una tarea en segundo plano en proceso o Crear y registrar una tarea en segundo plano fuera de proceso.

Creación de un objeto SystemTrigger

En el código de la aplicación, cree un nuevo objeto SystemTrigger. El primer parámetro, triggerType, especifica el tipo de desencadenador de eventos del sistema que activará esta tarea en segundo plano. Para obtener una lista de tipos de eventos, consulte SystemTriggerType.

El segundo parámetro, OneShot, especifica si la tarea en segundo plano se ejecutará solo una vez la próxima vez que se produzca el evento del sistema o cada vez que se produzca el evento del sistema hasta que se anule el registro de la tarea.

El código siguiente especifica que la tarea en segundo plano se ejecuta cada vez que Internet esté disponible:

SystemTrigger internetTrigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
Windows::ApplicationModel::Background::SystemTrigger internetTrigger{
    Windows::ApplicationModel::Background::SystemTriggerType::InternetAvailable, false};
SystemTrigger ^ internetTrigger = ref new SystemTrigger(SystemTriggerType::InternetAvailable, false);

Registrar la tarea en segundo plano

Registre la tarea en segundo plano llamando a la función de registro de tareas en segundo plano. Para obtener más información sobre el registro de tareas en segundo plano, vea Registrar una tarea en segundo plano.

El código siguiente registra la tarea en segundo plano para un proceso en segundo plano que se ejecuta fuera de proceso. Si estaba llamando a una tarea en segundo plano que se ejecuta en el mismo proceso que la aplicación host, no establecería entrypoint:

string entryPoint = "Tasks.ExampleBackgroundTaskClass"; // Namespace name, '.', and the name of the class containing the background task
string taskName   = "Internet-based background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" }; // don't set for in-process background tasks.
std::wstring taskName{ L"Internet-based background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass"; // don't set for in-process background tasks
String ^ taskName   = "Internet-based background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);

Nota:

las aplicaciones de Plataforma universal de Windows deben llamar RequestAccessAsync antes de registrar cualquiera de los tipos de desencadenador en segundo plano.

Para asegurarse de que la aplicación universal de Windows sigue ejecutándose correctamente después de publicar una actualización, debes llamar a RemoveAccess y, a continuación, llamar a RequestAccessAsync cuando la aplicación se inicie después de actualizarse. Para obtener más información, vea Directrices para tareas en segundo plano.

Nota:

Los parámetros de registro de tareas en segundo plano se validan en el momento del registro. Se devuelve un error si alguno de los parámetros de registro no es válido. Asegúrese de que la aplicación controla correctamente los escenarios en los que se produce un error en el registro de tareas en segundo plano; en su lugar, la aplicación depende de tener un objeto de registro válido después de intentar registrar una tarea, puede bloquearse.  

Comentarios

Para ver el registro de tareas en segundo plano en acción, descargue el ejemplo de tarea en segundo plano.

Las tareas en segundo plano se pueden ejecutar en respuesta a los eventos SystemTrigger y MaintenanceTrigger, pero todavía tiene que declarar tareas en segundo plano en el manifiesto de aplicación. También debe llamar a RequestAccessAsync antes de registrar cualquier tipo de tarea en segundo plano.

Las aplicaciones pueden registrar tareas en segundo plano que respondan a los eventos TimeTrigger, PushNotificationTrigger y NetworkOperatorNotificationTrigger, lo que les permite proporcionar comunicación en tiempo real con el usuario incluso cuando la aplicación no está en primer plano. Para obtener más información, consulta Compatibilidad con la aplicación con tareas en segundo plano.