如何登錄背景工作
Language: HTML | XAML

如何登錄背景工作 (XAML)

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

了解如何建立可重複用來安全登錄大多數背景工作的函式。 這個主題會逐步解說可登錄背景工作的公用程式函式。這個公用程式函式會先檢查現有登錄,以避免多次登錄工作時可能產生的問題;也可以將系統條件套用到背景工作。本逐步解說包括這個公用程式函式的完整工作範例。

注意  

就「Windows Phone 市集」應用程式而言,在嘗試登錄任何背景工作之前,您都必須先呼叫 RequestAccessAsync。在 Windows 上,只有當一組背景工作需要應用程式在鎖定畫面上才能執行時,才需要進行這個呼叫,但是在 Windows Phone 上,登錄任何背景工作之前,都必須先呼叫一次這個方法。

為了確保您的「Windows Phone 市集」應用程式在您發行更新之後會繼續正常執行,當應用程式在更新後啟動時,您必須呼叫 RemoveAccess,然後呼叫 RequestAccessAsync。如需詳細資訊,請參閱背景工作的指導方針 (Windows 執行階段應用程式)

您必須知道的事

技術

先決條件

  • 這個主題假設您已經有需要登錄的背景工作 (這個主題不會討論如何編寫背景工作)。

指示

步驟 1: 定義方法簽章和傳回類型

這個方法會採用背景工作的工作進入點、工作名稱、預先建構的背景工作觸發程序,以及 (選用) SystemCondition。這個方法會傳回 BackgroundTaskRegistration 物件。


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    
    // We’ll add code to this function in subsequent steps.

}

步驟 2: 檢查現有登錄

檢查工作是否已登錄。這是檢查的重點,因為如果多次登錄工作,則觸發該工作時,它就會多次執行;這樣可能會過量使用 CPU 配額,也可能造成未預期的行為。

您可以查詢 BackgroundTaskRegistration.AllTasks 屬性並逐一查看結果,以檢查現有登錄。檢查每個執行個體的名稱 - 如果它符合您要登錄的工作名稱,則中斷迴圈並設定旗標變數,讓您的程式碼能夠在下一個步驟中選擇不同路徑。

注意  使用您應用程式專用的背景工作名稱。確認每個背景工作都有唯一的名稱。
 

下列程式碼會使用我們在上一個步驟中建立的 SystemTrigger 來登錄背景工作:


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == name)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    // We’ll register the task in the next step.

}

步驟 3: 登錄背景工作 (或傳回現有登錄)

檢查現有背景工作登錄清單中是否已有該工作。如果有,則傳回工作的該執行個體。

然後使用新的 BackgroundTaskBuilder 物件登錄工作。這段程式碼應該會檢查條件參數是否為 Null;如果不是,則將條件新增到登錄物件。傳回由 BackgroundTaskBuilder.Register 方法傳回的 BackgroundTaskRegistration

注意  

從 Windows 8.1 開始,背景工作登錄參數都是在登錄時驗證。如果有任一個登錄參數無效,就會傳回錯誤。您的應用程式必須能夠處理背景工作登錄失敗的狀況,例如使用條件式陳述式來檢查登錄是否有錯誤,接著使用不同的參數值來重試已失敗的登錄。

 

下列範例會傳回現有工作,或新增可登錄背景工作的程式碼 (如果有選擇性的系統條件,則也包括在內):


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = name;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

完成背景工作登錄公用程式函式

這個範例顯示已完成的背景工作登錄函式。這個函式可用來登錄大多數的背景工作 (除了網路背景工作之外)。


//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint,
                                                                string taskName,
                                                                IBackgroundTrigger trigger,
                                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

相關主題

快速入門:建立並登錄背景工作
如何使用背景工作回應系統事件
如何設定執行背景工作的條件
如何使用維護觸發程序
如何處理已取消的背景工作
如何監視背景工作進度和完成
如何在計時器上執行背景工作
如何偵錯背景工作
如何在 Windows 市集 app 觸發暫停、繼續以及背景事件 (偵錯時)

 

 

顯示:
© 2016 Microsoft