开发后台应用程序
注意
在部署到 RS5(或启用了 OpenSSH 的 RS4)IoT 映像时,Visual Studio 会生成一条晦涩的错误,除非安装了可供 Visual Studio 访问的来自 RS4 或更高版本的 SDK。
后台应用程序是没有直接 UI 的应用程序。 部署和配置后,这些应用程序在计算机启动时启动并持续运行,没有任何进程生存期管理资源使用限制。 如果它们崩溃或退出,系统将自动重启它们。 这些后台应用程序具有非常简单的执行模型。 模板创建实现“IBackgroundTask”接口并生成空的“Run”方法的类。 此“Run”方法是应用程序的入口点。
需要注意一个关键点:默认情况下,应用程序将在运行方法完成时关闭。 这意味着,遵循运行服务器等待输入或计时器运行常见 IoT 模式的应用将提前发现应用退出。 若要防止发生这种情况,必须调用“GetDeferral”方法,以防止应用程序退出。 可在此处找到有关延迟模式的详细信息。
可以从何处安装后台应用程序?
可以从此处的 Visual Studio 库下载并安装 IoT 模板以启用后台应用程序。 或者,可通过在 Visual Studio 库中或直接从“扩展和更新”对话框(“工具”>“扩展和更新”>“联机”)中的 Visual Studio 搜索 Windows IoT Core Project Templates
来找到模板。
哪些语言可用?
可以在以下项中找到后台应用程序 (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)
{
}
当运行方法结束时,除非创建延迟对象,否则后台应用程序将结束。 异步编程的常见做法是采用如下所示的延迟:
private BackgroundTaskDeferral deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();
//
// TODO: Insert code to start one or more asynchronous methods
//
}
一旦使用延迟,后台应用程序将继续运行,直到调用延迟对象的完成方法。
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 Core 设备的 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 会话中,可以发出关闭命令:
[<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 包