開發背景應用程式
注意
除非安裝了 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
取代如下):
使用 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套件