開發背景應用程式

注意

除非安裝了 Visual Studio 可存取的 RS4 或更新版本的 SDK,否則在部署至 RS5 (或已啟用 OpenSSH 的 RS4) IoT 映像時,Visual Studio 將產生難以理解的錯誤。

背景應用程式是沒有直接 UI 的應用程式。 部署並設定之後,這些應用程式會在計算機啟動時啟動並持續執行,而不需要任何進程生命週期管理資源使用限制。 如果它們當機或結束,系統會自動重新啟動它們。 這些背景應用程式具有非常簡單的執行模型。 範本會建立實作 「IBackgroundTask」 介面的類別,併產生空的 「Run」 方法。 這個「執行」方法是應用程式的進入點。

背景工作

請注意,有一個關鍵點:根據預設,當執行方法完成時,應用程式將會關閉。 這表示執行伺服器等候輸入或定時器時,遵循常見IoT模式的應用程式會過早地找到應用程式結束。 若要防止這種情況發生,您必須呼叫 「GetDeferral」 方法來防止應用程式結束。 您可以在這裡找到有關延遲模式的詳細資訊。

可從何處安裝背景應用程式?

您可以在這裡下載並安裝IoT範本,以從Visual Studio資源庫啟用背景應用程式。 或者,您也可以在 Visual Studio 資源庫中搜尋Windows IoT Core Project Templates範本,或直接從 Visual Studio 在 [擴充功能和更新] 對話框中尋找範本(工具>延伸模組和更新>在線)。

有哪些語言可供使用?

背景應用程式 (IoT) 樣本可找到下列專案:

  • C++ File > New > Project > Installed > Visual C++ > Windows > Windows IoT Core
  • C# File > New > Project > Installed > Visual C# > Windows > Windows IoT Core
  • Visual Basic File > New > Project > Installed > Visual Basic > Windows > Windows IoT Core
  • JavaScript File > New > Project > Installed > JavaScript > Windows > Windows IoT Core

如何使用背景應用程式?

建立背景應用程式與建立背景工作非常類似。 當背景應用程式啟動時,會呼叫 Run 方法:

public void Run(IBackgroundTaskInstance taskInstance)
{
}

當 Run 方法結束時,除非建立延遲對象,否則背景應用程式會結束。 異步程式設計的常見作法是採用如下的延遲:

private BackgroundTaskDeferral deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
    deferral = taskInstance.GetDeferral();

    //
    // TODO: Insert code to start one or more asynchronous methods
    //
}

取得延遲之後,背景應用程式會繼續執行,直到呼叫延遲物件的 Complete 方法為止。

deferral.Complete();

背景應用程式如何啟動?

這個問題可以分成部署和叫用。

若要部署背景應用程式,您可以:

  • 使用 Visual Studio 的 F5 (將會建置、部署和叫用)。 如需詳細資訊,請參閱我們的 Hello World 範例 ,其中說明如何從 Visual Studio 部署和啟動。

注意

這不會將您的背景應用程式設定為在裝置開機時啟動。

  • 選取 [專案 > 存放區 > 建立應用程式套件],在 Visual Studio 中建立 AppX。 建立 AppX 之後,您可以使用 Windows 裝置入口網站將它部署到您的 Windows 10 IoT 核心版 裝置。

若要叫用背景應用程式,您可以:

  • 如上所述,Visual Studio 的 F5 功能將會部署並立即啟動您的背景應用程式。

注意

這不會將您的背景應用程式設定為在裝置開機時啟動。

  • 對於已部署至IoT裝置的背景應用程式,您可以使用 iotstartup.exe公用程式,將背景應用程式設定為在裝置開機時啟動。 若要將背景應用程式指定為啟始應用程式,請遵循下列指示(以您的應用程式名稱BackgroundApplication1取代如下):
  1. 使用 Windows IoT 核心版裝置啟動 PowerShell (PS) 工作階段,如這裡所述

  2. 從 PS 工作階段輸入:

    [<your IP address>]: PS C:\> iotstartup list BackgroundApplication1

  3. 您應該會看到背景應用程式的完整名稱,例如:

    Headed : BackgroundApplication1-uwp_cqewk5knvpvee!App Headless : BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee

  4. 公用程式正在確認您的背景應用程式是「無頭部」應用程式,且已正確安裝。 您可能會看到背景應用程式的前端專案,但可以忽略此專案。

  5. 現在,將這個應用程式設定為「啟動應用程式」很容易。 只要輸入命令:

    [<your IP address>]: PS C:\> iotstartup add headless BackgroundApplication1

  6. 公用程式會確認背景應用程式已新增至無外設 「啟動應用程式」清單:

    Added Headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpveeplication1

  7. 繼續並重新啟動您的 Windows IoT 核心版裝置。 您可以從 PS 工作階段發出 shutdown 命令:

    [<your IP address>]: PS C:\> shutdown /r /t 0

  8. 裝置重新啟動之後,您的背景應用程式會自動啟動,Windows 10 IoT 核心版 可確保它隨時重新啟動。

    注意

    註冊背景應用程式以自動執行之後,如果應用程式結束時或當機,系統就會自動重新啟動。 應用程式沒有收到啟動或重新啟動的原因,因此如果您想要在重新啟動時採取特殊動作,則必須追蹤應用程式中的應用程式狀態。

  9. 您可以輸入 命令,從無頭啟動應用程式清單中移除背景應用程式:

    [<your IP address>]: PS C:\> iotstartup remove headless BackgroundApplication1

  10. 公用程式會確認背景應用程式已從無外設 「啟動應用程式」清單中移除:

    Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee

另請參閱

若要在建置自定義映像時新增背景應用程式,請參閱 建立Appx套件