開發背景應用程式

注意

除非安裝了 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 的 [擴充功能和更新] 對話方塊, ([工具 > 延伸模組] 和 [更新 > Online) ]。

有哪些語言可供使用?

您可以在下列專案找到背景應用程式 (IoT) 範本:

  • C++File > New > Project > Installed > Visual C++ > Windows > Windows IoT Core
  • C#File > New > Project > Installed > Visual C# > Windows > Windows IoT Core
  • Visual BasicFile > New > Project > Installed > Visual Basic > Windows > Windows IoT Core
  • JAVAscriptFile > 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 套件