如何監視背景工作進度和完成 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解應用程式如何辨識背景工作所報告的進度與完成。 背景工作會與應用程式分離,而且它們會分開執行,但是應用程式程式碼可以監視背景工作的進度與完成。為了執行這項作業,應用程式會訂閱本身已在系統中登錄的背景工作事件。
您必須知道的事
技術
先決條件
- 這個主題假設您有一個會登錄背景工作的應用程式。若要快速開始建立背景工作,請參閱快速入門:建立並登錄背景工作。如需條件與觸發程序的深入資訊,請參閱使用背景工作支援應用程式。
指示
步驟 1:
建立一個將連結到完成背景工作的事件處理常式的函式。這個函式必須使用 BackgroundTaskCompletedEventArgs 物件,而且不能使用其他參數。
如果您正在本機登錄函式,您可以使用下列配置:
function OnCompleted(args) { // TODO: Add code that deals with background task completion. }
然後,您可以使用您的 BackgroundTaskRegistration 物件 (對 Register 函式使用成功的呼叫而取得),依照這樣的方式進行登錄:
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(); }