使用后台任务响应系统事件

重要的应用程序接口(API)

了解如何创建响应 SystemTrigger 事件的后台任务。

本主题假定你有一个为应用编写的后台任务类,并且此任务需要针对系统触发的事件(例如 Internet 可用性更改或用户登录时)运行。 本主题重点介绍 SystemTrigger 类。 有关编写后台任务类的详细信息,请参阅 创建和注册进程内后台任务创建和注册进程外后台任务

创建 SystemTrigger 对象

在应用代码中,创建一个新的 SystemTrigger 对象。 第一个参数 triggerType,指定将激活此后台任务的系统事件触发器的类型。 有关事件类型的列表,请参阅 SystemTriggerType

第二个参数 OneShot,指定后台任务是在下次发生系统事件时运行一次,还是在每次系统事件发生时运行,直到任务注销为止。

以下代码指定每当 Internet 可用时,后台任务就会运行:

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。 有关详细信息,请参阅 后台任务指南

注释

后台任务注册参数在注册时会被验证。 如果任何注册参数无效,则返回错误。 确保应用程序能够有效处理后台任务注册失败的情况——如果在尝试注册任务后应用程序依赖于拥有有效的注册对象,那么它可能会崩溃。  

注解

若要查看后台任务注册的操作,请下载 后台任务示例

后台任务可以运行以响应 SystemTriggerMaintenanceTrigger 事件,但仍需要在应用程序清单声明后台任务。 注册任何后台任务类型之前,还必须调用 RequestAccessAsync

应用可以注册响应 TimeTriggerPushNotificationTrigger以及 NetworkOperatorNotificationTrigger 事件的后台任务,从而使这些任务能够在应用不在前台时向用户提供实时通信。 有关详细信息,请参阅 用后台任务支持应用