Поделиться через


Реагирование на системные события с помощью фоновых задач

Основные API

Узнайте, как создать фоновую задачу, которая отвечает на события SystemTrigger .

В этом разделе предполагается, что у вас есть класс фоновой задачи, написанный для приложения, и что эта задача должна выполняться в ответ на событие, активируется системой, например при изменении доступности в Интернете или входе пользователя в систему. В этом разделе рассматриваются класс SystemTrigger . Дополнительные сведения о написании класса фоновой задачи доступны в Создание и регистрация фоновой задачи внутри процесса или Создание и регистрация фоновой задачи вне процесса.

Создание объекта SystemTrigger

В коде приложения создайте новый объект SystemTrigger . Первый параметр , triggerType, указывает тип триггера системного события, который активирует эту фоновую задачу. Список типов событий см. в разделе SystemTriggerType.

Второй параметр OneShot указывает, будет ли фоновая задача выполняться только один раз при следующем возникновении системного события или при каждом возникновении системного события до отмены регистрации задачи.

Следующий код указывает, что фоновая задача выполняется всякий раз, когда Интернет становится доступным:

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

Регистрация фоновой задачи

Зарегистрируйте фоновую задачу, вызвав функцию регистрации фоновых задач. Дополнительные сведения о регистрации фоновых задач см. в разделе "Регистрация фоновой задачи".

Следующий код регистрирует фоновую задачу для фонового процесса, который выполняется вне процесса. Если вы вызываете фоновую задачу, которая выполняется в том же процессе, что и основное приложение, вы не должны задавать: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);

Замечание

Приложения универсальной платформы Windows должны вызывать RequestAccessAsync перед регистрацией любого из типов фоновых триггеров.

Чтобы обеспечить правильность работы приложения универсальной версии Windows после выпуска обновления, необходимо вызвать RemoveAccess, а затем вызвать RequestAccessAsync при запуске приложения после обновления. Дополнительные сведения см. в разделе Рекомендации по фоновым задачам.

Замечание

Параметры регистрации фоновых задач проверяются во время регистрации. Ошибка возвращается, если какие-либо из параметров регистрации недопустимы. Убедитесь, что приложение корректно обрабатывает сценарии, в которых регистрация фоновых задач завершается ошибкой. Если вместо этого приложение зависит от наличия допустимого объекта регистрации после попытки регистрации задачи, это может завершиться сбоем.  

Замечания

Чтобы увидеть регистрацию фоновых задач в действии, скачайте пример задачи .

Фоновые задачи могут выполняться в ответ на события SystemTrigger и MaintenanceTrigger, но по-прежнему необходимо объявить фоновые задачи в манифесте приложения. Перед регистрацией любого типа фоновой задачи необходимо также вызвать RequestAccessAsync .

Приложения могут регистрировать фоновые задачи, реагирующие на события TimeTrigger, PushNotificationTriggerи NetworkOperatorNotificationTrigger, что позволяет им обеспечивать взаимодействие с пользователем в режиме реального времени, даже если приложение не находится на переднем плане. Дополнительные сведения см. в статье "Поддержка приложения с помощью фоновых задач".