在 Windows 8.1 中建立裝置背景工作 (UWP 裝置應用程式)

在 Windows 8.1 中,您的 UWP app 可以同步處理周邊裝置上的數據。 如果您的 app 與裝置元數據相關聯,該 UWP 裝置應用程式也可以執行裝置更新,例如韌體更新。 本主題描述如何建立使用 DeviceUseTrigger 或 DeviceServicingTrigger裝置背景工作。 使用這些觸發程式的裝置背景代理程式受限於原則,以確保使用者同意並協助在裝置同步處理和更新時保留電池使用時間。 如需裝置背景工作的詳細資訊,請參閱 UWP 裝置應用程式的裝置同步處理和更新。

注意

本主題對應至 自定義 USB 裝置範例。 自定義 USB 裝置範例示範背景工作,以使用 DeviceUseTrigger 執行裝置同步處理。

雖然自定義 USB 裝置範例中的裝置背景工作具有 DeviceUseTrigger,但本主題中討論的所有專案也可以套用至使用 DeviceServicingTrigger 的裝置背景工作。 使用這兩個觸發程式的唯一差異是 Windows 所做的原則檢查。

應用程式指令清單

若要使用裝置背景工作,您的應用程式必須在前景應用程式的應用程式指令清單檔案中宣告它,就像系統觸發的背景工作一樣。 如需詳細資訊,請參閱 UWP 裝置應用程式的裝置同步處理和更新。

在此範例中,來自應用程式套件指令清單檔案的 DeviceLibrary.SyncContent 是前景應用程式的進入點。 DeviceLibrary.SyncContent 是使用 DeviceUseTrigger 的背景工作進入點。

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

裝置背景工作

裝置背景工作類別會實作 介面, IBackgroundTask 並包含您建立以同步處理或更新周邊裝置的實際程序代碼。 背景工作類別會在觸發背景工作,並從應用程式應用程式指令清單中提供的進入點執行。

自定義 USB 裝置範例中的裝置背景類別包含使用 DeviceUseTrigger 背景工作執行與 USB 裝置同步的程式代碼。 如需完整詳細數據,請下載範例。 如需實作 IBackgroundTask 和 Windows 背景工作基礎結構的詳細資訊,請參閱 使用背景工作支援您的應用程式。

自訂 USB 裝置範例裝置背景工作的主要部分包括:

  1. 類別 IoSyncBackgroundTask 會實作 IBackgroundTask Windows 背景工作基礎結構所需的介面。

  2. 類別 IoSyncBackgroundTaskDeviceUseDetails 取得傳遞至 類別之 Run 方法中 IoSyncBackgroundTask 類別的實例,並使用這個實例將進度回報回 Microsoft Store 應用程式,並註冊取消事件。

  3. 類別 IoSyncBackgroundTask 的 Run 方法也會呼叫實作背景裝置同步程式代碼的私人 OpenDeviceWriteToDeviceAsync 方法。

前景應用程式

自定義 USB 裝置範例中的前景應用程式會註冊,並觸發使用 DeviceUseTrigger 的裝置背景工作。 本節概述前景應用程式將採取的步驟,以註冊、觸發及處理裝置背景工作的進度。

自訂 USB 裝置範例中的前景應用程式會執行下列步驟來使用裝置背景工作:

  1. 建立新的 DeviceUseTriggerBackgroundTaskRegistration 物件。

  2. 檢查此應用程式先前是否已註冊任何背景工作,並藉由在工作上呼叫 BackgroundTaskRegistration.Unregister 方法來取消工作。

  3. SetupBackgroundTask 用方法會註冊與裝置同步的背景工作。 方法 SetupBackgroundTask 會在下一個步驟中從 SyncWithDeviceAsync 方法呼叫。

    1. DeviceUseTrigger初始化 並儲存它以供稍後使用。

    2. 建立新的 BackgroundTaskBuilder 物件,並使用其 NameTaskEntryPointSetTrigger 屬性和 方法來註冊應用程式 DeviceUseTrigger 的物件和背景工作名稱。 對象的 BackgroundTaskBuilderTaskEntryPoint 屬性會設定為觸發背景工作時所要執行之背景工作類別的完整名稱。

    3. 從背景工作註冊完成和進度事件,讓前景應用程式可以提供完成和進度更新給使用者。

  4. SyncWithDeviceAsync 用方法會註冊與裝置同步的背景工作,並開始背景同步處理。

    1. SetupBackgroundTask從上一個步驟呼叫 方法,並註冊將與裝置同步的背景工作。

    2. 呼叫啟動背景工作的私 StartSyncBackgroundTaskAsync 用方法。 該方法會關閉應用程式的裝置句柄,以確保背景工作能夠在裝置啟動時開啟裝置。

      重要

      背景工作必須開啟裝置以執行更新,讓前景應用程式必須先關閉其與裝置的連線,才能呼叫 RequestAsync

    接下來,方法會 StartSyncBackgroundTaskAsync 呼叫 DeviceUseTrigger 物件的 RequestAsync 方法,這個方法會啟動觸發背景工作,並從 中傳回 DeviceTriggerResults 物件 RequestAsync ,以判斷背景工作是否成功啟動。

    重要

    Windows 檢查,以確保所有必要的工作初始原則檢查都已完成。 如果已完成所有原則檢查,更新作業現在會以前景應用程式以外的背景工作的形式執行,讓應用程式在作業進行時安全地暫停。 如果不再符合這些需求,Windows 也會強制執行任何運行時間需求,並取消背景工作。

  5. 最後, SyncWithDeviceAsync 方法會使用 DeviceTriggerResultsStartSyncBackgroundTaskAsync 傳回的對象來判斷背景工作是否成功啟動。 switch 語句是用來檢查結果的來源 DeviceTriggerResults

  6. 前景應用程式會實作私 OnSyncWithDeviceProgress 用事件處理程式,以從裝置背景工作取得進度來更新應用程式 UI。

  7. 前景應用程式會實作私 OnSyncWithDeviceCompleted 用事件處理程式,以在背景工作完成時處理從背景工作轉換到前景應用程式的轉換。

    1. CheckResults使用物件的 方法BackgroundTaskCompletedEventArgs,判斷背景工作是否擲回任何例外狀況。

    2. 前景應用程式會重新開啟裝置以供應用程式使用,現在背景工作已完成並更新UI以通知使用者。

  8. 前景應用程式會實作 UI 中的私用按鈕按兩下事件處理程式,以啟動和取消背景工作。

    1. 私用 Sync_Click 事件處理程式會呼叫 SyncWithDeviceAsync 上述步驟中所述的方法。

    2. CancelSync_Click 用事件處理程式會呼叫 private CancelSyncWithDevice 方法來取消背景工作。

  9. CancelSyncWithDevice 用方法會取消註冊並取消任何作用中的裝置同步處理,以便使用 BackgroundTaskRegistration.Unregister 方法重新開啟裝置。

自定義 USB 裝置範例

UWP 裝置應用程式的裝置同步處理和更新

Launching, resuming, and multitasking

使用背景工作支援您的應用程式