开发后台应用程序

注意

在部署到 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):
  1. 按照此处所述,启动与 Windows IoT Core 设备的 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 会话中,可以发出关闭命令:

    [<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 包