共用方式為


如何監視背景工作進度和完成 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

了解應用程式如何辨識背景工作所報告的進度與完成。 背景工作會與應用程式分離,而且它們會分開執行,但是應用程式程式碼可以監視背景工作的進度與完成。為了執行這項作業,應用程式會訂閱本身已在系統中登錄的背景工作事件。

您必須知道的事

技術

先決條件

指示

步驟 1:

  1. 建立一個將連結到完成背景工作的事件處理常式的函式。這個函式必須使用 BackgroundTaskCompletedEventArgs 物件,而且不能使用其他參數。

    如果您正在本機登錄函式,您可以使用下列配置:

    function OnCompleted(args)
    {
        // TODO: Add code that deals with background task completion.
    }
    

    然後,您可以使用您的 BackgroundTaskRegistration 物件 (對 Register 函式使用成功的呼叫而取得),依照這樣的方式進行登錄:

    backgroundTaskRegistration.addEventListener("completed", onCompleted);
    
  2. 您必須新增負責完成背景工作的程式碼。

    例如,背景工作範例會使用儲存在 LocalSettings 中的完成狀態來更新 UI:

    function OnCompleted(args)
    {
        // 
        // 
        // 
        backgroundTaskName = this.name;
    
        // 
        // Call a method to update the UI (beyond the scope of this example).
        // 
        UpdateUI();
    }
    
  3. 健全的應用程式可以呼叫 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:

  1. 建立事件處理常式函式,以處理完成的背景工作。這個程式碼需要遵循特定的配置,其中包括 IBackgroundTaskRegistration 物件與 BackgroundTaskProgressEventArgs 物件:

    針對 OnProgress 背景工作事件處理常式方式使用下列配置:

    function OnProgress(task, args)
    {
        // TODO: Add code that deals with background task progress.
    }
    
  2. 將程式碼新增至會處理背景工作完成的事件處理常式。

    例如,背景工作範例會使用透過 args 參數所傳遞的進度狀態來更新 UI:

    function OnProgress(task, args)
    {
        var progress = "Progress: " + args.Progress + "%";
        BackgroundTaskSample.SampleBackgroundTaskProgress = progress;
        UpdateUI();
    }
    

步驟 3:

使用新的和現有的背景工作來登錄事件處理函式。

  1. 當應用程式第一次登錄背景工作時,它應該登錄以接收其進度和完成更新,以防應用程式在前景仍然為使用中時執行工作。

    例如,背景工作範例會在它登錄的每個背景工作上呼叫下列函式:

    
    function AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task)
    {
        task.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
        task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
    }
    
  2. 當應用程式啟動或是瀏覽至背景工作狀態是相關的新頁面時,它應該取得目前登錄的背景工作清單,並將它們與進度和完成事件處理函式關聯。應用程式目前登錄的背景工作清單保留在 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();
    }
    

相關主題

快速入門:建立並登錄背景工作

如何偵錯背景工作

使用背景工作支援 app

如何處理已取消的背景工作

如何取得擱置中的背景工作清單

如何在應用程式資訊清單中宣告背景工作

背景工作的指導方針和檢查清單