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

Важные 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. Это позволяет им поддерживать связь с пользователем в реальном времени, даже когда приложение не находится на переднем плане. Дополнительные сведения см. в статье Поддержка приложения с помощью фоновых задач.