如何在通用Windows应用中创建计划任务?






4.81/5 (5投票s)
如何在通用Windows应用中创建计划任务?
引言
计划任务通常需要执行一些清理工作,从互联网获取一些记录,以及/或者更新动态磁贴/锁屏界面。也可能有一些其他的需求。如果你想在你的 Windows 和/或 Windows Phone 运行时应用中添加计划任务,那么这个教程就是为你准备的。
在这篇文章中,我们将保持通用性,学习如何在通用 Windows 应用中创建计划任务。最后,请分享你的反馈以帮助改进。别忘了在你的网络中分享。
当你使用名为 Windows Universal Apps 的通用共享模板为 Windows 和 Windows Phone 构建应用时,Windows 运行时应用非常有用。如果你正在开发面向通用应用的应用程序/游戏,这篇文章将帮助你根据需要安排一些任务,无论是什么!
步骤 1:配置项目以托管后台任务
假设你已经创建了一个通用 Windows 应用项目,我将进一步讨论如何在其上添加任务调度。
首先,你必须创建一个类型为“Windows Runtime Component”的新项目。要做到这一点,请在 Visual Studio IDE 中右键点击你的项目解决方案或应用文件夹(如上所示)->从上下文菜单中点击“添加”->点击“新建项目”。这将打开屏幕上的“添加新项目”对话框。
如上所示,在左侧面板中导航到“已安装”->“Visual C#”(或你正在使用的编程语言类型)->“Store Apps”->“Universal Apps”。在右侧面板中,选择标记为“Windows Runtime Component (Portable for Universal Apps)”的项目模板。给它一个名字,例如“BackgroundTasks”,然后按 Enter。
这将在你的应用程序解决方案中创建一个新项目。由于它是一个可移植类库,你可以将其作为引用在 Windows 和 Windows Phone 应用程序中使用。
在该项目中,你会看到一个名为“Class1
”的默认类。将其重命名以赋予其合适的含义。例如,我们将把它重命名为“TileUpdateTask.cs”。
现在,在你的主项目中添加可移植类库引用。可以是 Windows 项目、Windows Phone 项目或两者兼有。
完成此操作后,我们需要向应用添加一个声明,以便它可以识别后台任务。添加该声明后,即使应用已被提交,它也会运行应用代码。
请记住,后台任务旨在执行不需要用户交互的小型工作项。
另外请记住,如果你想在你的应用或游戏中运行多个后台任务,你可以在 Package.appxmanifest XML 文件中添加多个声明。
要做到这一点,请打开 Package.appxmanifest 文件->导航到“Declarations”选项卡。现在,从“Available Declarations”面板中,选择“Background Tasks”,然后点击“Add”按钮。这将将其添加到支持的声明部分。现在在右侧面板中,你需要设置一些属性和设置。在“Properties”部分,后台任务有许多支持的任务类型。它们是“Audio”、“Chat message notification”、“Device use trigger”、“Location”、“Push notification”、“System event”和“Timer”。从列表中选择一个或多个选项。
现在在“App Settings”面板中,设置后台任务的入口点。在本例中,它是:“BackgroundTasks.TileUpdateTask
”,其中“BackgroundTasks.TileUpdateTask
”是要执行类的完全限定名。
步骤 2:注册你的后台任务
接下来,你需要在你的手机上注册后台任务。要做到这一点,请打开你想要注册的 xaml.cs 页面。重写 OnNavigatedTo
方法并注册后台任务。
下面是作为你的应用/游戏一部分注册后台任务的典型代码片段。在注册任务之前,你需要调用“BackgroundExecutionManager.RequestAccessAsync()
”。在 Windows 上,此方法会向用户显示一个对话框,请求允许将应用添加到锁屏界面。但在 Windows Phone 上,情况略有不同。此方法在此处不会提示用户,但必须在注册任何后台任务之前调用。
最后,创建 BackgroundTaskBuilder
类的实例,为其设置一个可识别的名称,将入口点设置为我们在 Package.appxmanifest 文件声明页中添加的类的完全限定名。设置你在声明页中指定的任务的触发器。在本例中,我们选择了“Timer
”,因此我们将在此处创建一个 TimeTrigger
,其值为 15 分钟以上。请记住,TimeTrigger
的值必须大于或等于 15 分钟。如果你指定的时间少于 15 分钟,运行时会抛出异常。现在调用 BackgroundTaskBuilder
对象上的 Register()
方法进行注册。
步骤 3:实现后台任务
最后,你需要实现后台任务。打开代码文件(在本例中是:可移植类库项目中的 TileUpdateTask.cs)并实现 IBackgroundTask
接口,该接口定义了一个名为“Run
”的方法。
在 run
方法中,调用传递给 Run
方法的后台任务实例的 GetDeferral()
。然后编写你的代码,最后调用 deferal.Complete()
。这将确保即使你从后台任务调用任何异步方法,你的应用程序也会运行。
注意事项
- 在 Package.appxmanifest 文件中为每个后台任务创建声明。
- 在注册任何后台任务之前调用
BackgroundExecutionManager.RequestAccessAsync()
方法。 - 如果你为后台任务创建了一个时间触发器,则时间至少应为 15 分钟。
希望你喜欢这篇博文。别忘了在下方留言并分享你的反馈。实现中有什么疑问吗?在这里留言,我会尽快回复。在下一篇博文中,我们将学习如何更新我们刚刚创建的计划任务的磁贴。在此之前,祝你编码愉快。