開發背景應用程式
注意
除非安裝了 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 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
取代下列) :
使用 Windows IoT 核心版裝置啟動 PowerShell (PS) 會話, 如這裡所述。
在 PS 會話中,輸入:
[<your IP address>]: PS C:\> iotstartup list BackgroundApplication1
您應該會看到背景應用程式的完整名稱,例如:
Headed : BackgroundApplication1-uwp_cqewk5knvpvee!App Headless : BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee
公用程式正在確認您的背景應用程式是「無周邊」應用程式,並已正確安裝。 您可能會看到背景應用程式的前端專案,但可以忽略此專案。
現在,輕鬆地將此應用程式設定為「啟動應用程式」。 只要輸入 命令:
[<your IP address>]: PS C:\> iotstartup add headless BackgroundApplication1
公用程式會確認您的背景應用程式已新增至無周邊 「啟動應用程式」清單:
Added Headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpveeplication1
繼續並重新啟動您的 Windows IoT 核心版裝置。 您可以從 PS 會話發出 shutdown 命令:
[<your IP address>]: PS C:\> shutdown /r /t 0
裝置重新開機之後,您的背景應用程式會自動啟動,Windows 10 IoT 核心版可確保它隨時重新開機。
注意
一旦註冊背景應用程式以自動執行,如果應用程式結束時或當機,系統就會自動重新開機。 應用程式未收到啟動或重新開機的原因,因此如果您想要在重新開機時採取特殊動作,您必須追蹤應用程式中的應用程式狀態。
您可以輸入 命令,從無周邊啟動應用程式清單中移除背景應用程式:
[<your IP address>]: PS C:\> iotstartup remove headless BackgroundApplication1
公用程式會確認您的背景應用程式已從無周邊 「啟動應用程式」清單中移除:
Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee
另請參閱
若要在建置自訂映射時新增背景應用程式,請參閱 建立 Appx 套件