Разработка фоновых приложений

Примечание

При развертывании в ОС образа RS5 (или RS4 с запущенными средствами OpenSSH) в Visual Studio возникает непонятная ошибка, если не установлен пакет SDK для RS4 или более поздней версии, который доступен для Visual Studio.

Фоновые приложения — это приложения без прямого пользовательского интерфейса. После развертывания и настройки эти приложения запускаются при запуске компьютера и выполняются непрерывно без ограничений использования ресурсов управления жизненным циклом процесса. Если они завершаются сбоем или выходом из системы, они будут автоматически перезапущены. Эти фоновые приложения имеют очень простую модель выполнения. Шаблоны создают класс, который реализует интерфейс IBackgroundTask и создает пустой метод Run. Этот метод Run — это точка входа для приложения.

Фоновая задача

Есть одна важная точка, чтобы отметить: по умолчанию приложение завершит работу после завершения метода выполнения. Это означает, что приложения, которые следуют распространенному шаблону Интернета вещей, на котором запущен сервер, ожидающий ввода или таймера, будут преждевременно завершать работу приложения. Чтобы предотвратить это, необходимо вызвать метод GetDeferral, чтобы предотвратить выход приложения. Дополнительные сведения о шаблоне отсрочки можно найти здесь.

Откуда можно установить фоновые приложения?

Вы можете скачать и установить шаблоны Интернета вещей, чтобы включить фоновые приложения из коллекции Visual Studio здесь. Кроме того, шаблоны можно найти, выполнив поиск Windows IoT Core Project Templates в коллекции Visual Studio или непосредственно из 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.

deferral.Complete();

Как запустить фоновые приложения?

Этот вопрос можно разбить на развертывание и вызов.

Чтобы развернуть фоновое приложение, можно выполнить одно из следующих действий:

  • Используйте F5 Visual Studio (который будет создавать, развертывать и вызывать). Дополнительные сведения см. в нашем Hello World примере, в котором описывается развертывание и запуск из Visual Studio.

Примечание

Это не настроит фоновое приложение для запуска при загрузке устройства.

  • Создайте AppX в Visual Studio, выбрав "Создать пакеты приложений в Магазине > Проектов>". После создания AppX можно использовать портал устройств Windows для развертывания на устройстве Windows 10 IoT Базовая.

Чтобы вызвать фоновое приложение, можно выполнить одно из следующих действий:

  • Как упоминалось выше, функциональные возможности Visual Studio F5 будут развертываться и немедленно запускать фоновое приложение.

Примечание

Это не настроит фоновое приложение для запуска при загрузке устройства.

  • Для фонового приложения, развернутого на устройстве Интернета вещей, можно использовать служебную программу iotstartup.exe, чтобы настроить фоновое приложение для запуска при загрузке устройства. Чтобы указать фоновое приложение в качестве запускаемого приложения, следуйте приведенным ниже инструкциям (замените его именемBackgroundApplication1):
  1. Запустите сеанс PowerShell (PS) с устройством Windows IoT Core, как описано здесь.

  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 Core. В сеансе 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. Служебная программа подтвердит, что фоновое приложение удалено из списка неуправляемых приложений Startup Apps:

    Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee

См. также:

Добавление фонового приложения при создании пользовательского образа см. в статье "Создание пакета Appx"