如何监视后台任务进度和完成 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
介绍应用如何识别后台任务报告的进度和完成。 后台任务从应用中分离开来,并且它们单独运行,但可以通过应用代码监视后台任务进度和完成。若要进行该操作,应用订阅已向系统注册的后台任务事件。
你需要了解的内容
技术
先决条件
- 本主题假定你拥有一个注册后台任务的应用。若要快速构建后台任务,请阅读快速入门:创建和注册后台任务。有关条件和触发器的详细信息,请参阅使用后台任务支持应用。
说明
步骤 1:
创建一个函数,该函数将连接到事件处理程序以完成后台任务。此函数必须采用一个 BackgroundTaskCompletedEventArgs 对象且不采用任何其他参数。
如果你要在本地注册某个函数,则可以使用以下内存占用:
function OnCompleted(args) { // TODO: Add code that deals with background task completion. }
然后你可以像这样向你的 BackgroundTaskRegistration 对象(该对象是通过使用对注册函数的成功调用来获取的)注册它:
backgroundTaskRegistration.addEventListener("completed", onCompleted);
你将需要添加代码,该代码将处理后台任务完成。
例如,后台任务示例使用 LocalSettings 中保存的完成状态更新 UI:
function OnCompleted(args) { // // // backgroundTaskName = this.name; // // Call a method to update the UI (beyond the scope of this example). // UpdateUI(); }
强大的应用可以通过调用 CheckResult 来检查后台任务引发的异常。
可以对后台任务示例进行如下修改,以处理后台任务引发的异常。
function OnCompleted(task, args) { var settings = ApplicationData.Current.LocalSettings; var key = task.TaskId.ToString(); try { args.CheckResult(); BackgroundTaskSample.SampleBackgroundTaskStatus = settings.Values[key].ToString(); } catch (Exception ex) { BackgroundTaskSample.SampleBackgroundTaskStatus = "Error: " + ex.Message; } UpdateUI(); }
步骤 2:
创建一个事件处理程序函数以处理完成的后台任务。该代码需遵循特定的足迹,即获取 IBackgroundTaskRegistration 对象和 BackgroundTaskProgressEventArgs 对象:
对 OnProgress 后台任务事件处理程序方法使用以下足迹:
function OnProgress(task, args) { // TODO: Add code that deals with background task progress. }
向处理后台任务完成的事件处理程序中添加代码。
例如,后台任务示例使用通过 args 参数传递的进度状态更新 UI:
function OnProgress(task, args) { var progress = "Progress: " + args.Progress + "%"; BackgroundTaskSample.SampleBackgroundTaskProgress = progress; UpdateUI(); }
步骤 3:
使用新的和现有的后台任务注册事件处理程序函数。
当应用第一次注册后台任务时,应用应该注册以在任务运行(同时应用仍然在前台处于活动状态)时接收它的进度和完成更新。
例如,后台任务示例在它触发的每个后台任务上调用以下函数:
function AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task) { task.Progress += new BackgroundTaskProgressEventHandler(OnProgress); task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); }
当应用启动或导航到后台任务状态相关的新页面时,它应用获取档期已注册的后台任务列表并将它们与进度和完成事件处理程序函数关联。应用程序当前已注册的后台任务列表位于 BackgroundTaskRegistration.AllTasks 属性中。
例如,后台任务示例在导航到 SampleBackgroundTask 页面时使用以下代码附加事件处理程序:
function OnNavigatedTo(NavigationEventArgs e) { foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == BackgroundTaskSample.SampleBackgroundTaskName) { AttachProgressAndCompletedHandlers(task.Value); BackgroundTaskSample.UpdateBackgroundTaskStatus(BackgroundTaskSample.SampleBackgroundTaskName, true); } } UpdateUI(); }