65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2015 年 2 月 22 日

CPOL

5分钟阅读

viewsIcon

18405

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

引言

计划任务通常需要执行一些清理工作,从互联网获取一些记录,以及/或者更新动态磁贴/锁屏界面。也可能有一些其他的需求。如果你想在你的 Windows 和/或 Windows Phone 运行时应用中添加计划任务,那么这个教程就是为你准备的。

这篇文章中,我们将保持通用性,学习如何在通用 Windows 应用中创建计划任务。最后,请分享你的反馈以帮助改进。别忘了在你的网络中分享。

当你使用名为 Windows Universal Apps 的通用共享模板为 Windows 和 Windows Phone 构建应用时,Windows 运行时应用非常有用。如果你正在开发面向通用应用的应用程序/游戏,这篇文章将帮助你根据需要安排一些任务,无论是什么!

步骤 1:配置项目以托管后台任务

假设你已经创建了一个通用 Windows 应用项目,我将进一步讨论如何在其上添加任务调度。

1. Create new project

首先,你必须创建一个类型为“Windows Runtime Component”的新项目。要做到这一点,请在 Visual Studio IDE 中右键点击你的项目解决方案或应用文件夹(如上所示)->从上下文菜单中点击“添加”->点击“新建项目”。这将打开屏幕上的“添加新项目”对话框。

2. Create new Windows Runtime Component

如上所示,在左侧面板中导航到“已安装”->“Visual C#”(或你正在使用的编程语言类型)->“Store Apps”->“Universal Apps”。在右侧面板中,选择标记为“Windows Runtime Component (Portable for Universal Apps)”的项目模板。给它一个名字,例如“BackgroundTasks”,然后按 Enter。

3. Add the project DLL reference of Windows Runtime Component (Background Tasks) project

这将在你的应用程序解决方案中创建一个新项目。由于它是一个可移植类库,你可以将其作为引用在 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”。从列表中选择一个或多个选项。

4. Add Background Tasks declaration in Package.appxmanifest

现在在“App Settings”面板中,设置后台任务的入口点。在本例中,它是:“BackgroundTasks.TileUpdateTask”,其中“BackgroundTasks.TileUpdateTask”是要执行类的完全限定名。

步骤 2:注册你的后台任务

接下来,你需要在你的手机上注册后台任务。要做到这一点,请打开你想要注册的 xaml.cs 页面。重写 OnNavigatedTo 方法并注册后台任务。

下面是作为你的应用/游戏一部分注册后台任务的典型代码片段。在注册任务之前,你需要调用“BackgroundExecutionManager.RequestAccessAsync()”。在 Windows 上,此方法会向用户显示一个对话框,请求允许将应用添加到锁屏界面。但在 Windows Phone 上,情况略有不同。此方法在此处不会提示用户,但必须在注册任何后台任务之前调用。

5. Register background task with the system

最后,创建 BackgroundTaskBuilder 类的实例,为其设置一个可识别的名称,将入口点设置为我们在 Package.appxmanifest 文件声明页中添加的类的完全限定名。设置你在声明页中指定的任务的触发器。在本例中,我们选择了“Timer”,因此我们将在此处创建一个 TimeTrigger,其值为 15 分钟以上。请记住,TimeTrigger 的值必须大于或等于 15 分钟。如果你指定的时间少于 15 分钟,运行时会抛出异常。现在调用 BackgroundTaskBuilder 对象上的 Register() 方法进行注册。

步骤 3:实现后台任务

最后,你需要实现后台任务。打开代码文件(在本例中是:可移植类库项目中的 TileUpdateTask.cs)并实现 IBackgroundTask 接口,该接口定义了一个名为“Run”的方法。

6. Write code to run the background task

run 方法中,调用传递给 Run 方法的后台任务实例的 GetDeferral()。然后编写你的代码,最后调用 deferal.Complete()。这将确保即使你从后台任务调用任何异步方法,你的应用程序也会运行。

注意事项

  1. Package.appxmanifest 文件中为每个后台任务创建声明。
  2. 在注册任何后台任务之前调用 BackgroundExecutionManager.RequestAccessAsync() 方法。
  3. 如果你为后台任务创建了一个时间触发器,则时间至少应为 15 分钟。

希望你喜欢这篇博文。别忘了在下方留言并分享你的反馈。实现中有什么疑问吗?在这里留言,我会尽快回复。在下一篇博文中,我们将学习如何更新我们刚刚创建的计划任务的磁贴。在此之前,祝你编码愉快。

如何在通用 Windows 应用中创建计划任务? - CodeProject - 代码之家
© . All rights reserved.