Разработка фоновых приложений
Примечание.
При развертывании в ОС образа RS5 (или RS4 с запущенными средствами OpenSSH) в Visual Studio возникает непонятная ошибка, если не установлен пакет SDK для RS4 или более поздней версии, который доступен для Visual Studio.
Фоновые приложения — это приложения, у которых нет прямого пользовательского интерфейса. После развертывания и настройки эти приложения запускаются на компьютере и выполняются непрерывно без ограничений использования ресурсов управления жизненным циклом процесса. При сбое или выходе из системы автоматически перезагрузится. Эти фоновые приложения имеют очень простую модель выполнения. Шаблоны создают класс, реализующий интерфейс IBackgroundTask и создающий пустой метод Run. Этот метод Run — это точка входа в приложение.
По умолчанию важно отметить одну важную точку: приложение завершит работу после завершения метода выполнения. Это означает, что приложения, которые следуют общему шаблону Интернета вещей для запуска сервера, ожидающего ввода или таймера, будут находить приложение завершатся преждевременно. Чтобы предотвратить это, необходимо вызвать метод GetDeferral, чтобы предотвратить выход приложения. Дополнительные сведения о шаблоне отсрочки см. здесь.
Откуда можно установить фоновые приложения?
Вы можете скачать и установить шаблоны Интернета вещей, чтобы включить фоновые приложения из коллекции Visual Studio здесь. Кроме того, шаблоны можно найти, выполнив поиск Windows IoT Core Project Templates
в коллекции Visual Studio или непосредственно из 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();
Как запустить фоновые приложения?
Этот вопрос можно разбить на развертывание и вызов.
Чтобы развернуть фоновое приложение, можно выполнить следующие действия.
- Используйте F5 Visual Studio (которая будет создавать, развертывать и вызывать). Дополнительные сведения см. в нашем примере Hello World, где описано, как развернуть и запустить из Visual Studio.
Примечание.
Это не настроит фоновое приложение для запуска при загрузке устройства.
- Создайте AppX в Visual Studio, выбрав "Создать пакеты приложений в Магазине > проектов>". После создания AppX вы можете использовать портал устройств Windows для развертывания на устройстве Windows 10 IoT Базовая.
Чтобы вызвать фоновое приложение, можно выполнить следующие действия.
- Как упоминалось выше, функциональные возможности Visual Studio F5 развертываются и немедленно запускают фоновое приложение.
Примечание.
Это не настроит фоновое приложение для запуска при загрузке устройства.
- Для фонового приложения, развернутого на устройстве Интернета вещей, можно использовать служебную программу iotstartup.exe, чтобы настроить фоновое приложение для запуска при загрузке устройства. Чтобы указать фоновое приложение в качестве запускаемого приложения, следуйте приведенным ниже инструкциям (замените его именем
BackgroundApplication1
):
Запустите сеанс PowerShell (PS) с устройством Windows IoT Core, как описано здесь.
В сеансе 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
Служебная программа подтвердит, что фоновое приложение было добавлено в список без головных приложений Startup Apps:
Added Headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpveeplication1
Перезапустите устройство Windows IoT Core. В сеансе PS можно выполнить команду завершения работы:
[<your IP address>]: PS C:\> shutdown /r /t 0
После перезапуска устройства фоновое приложение запустится автоматически и Windows 10 IoT Базовая убедитесь, что оно перезапущено в любое время, когда оно останавливается.
Примечание.
После автоматического запуска фонового приложения, если приложение завершает работу или завершает работу, оно будет автоматически перезапущено. Приложение не сообщает о причине запуска или перезапуска, поэтому, если вы хотите выполнить специальные действия по перезапуску, вам потребуется отслеживать состояние приложения в приложении.
Вы можете удалить фоновое приложение из списка бессерверных приложений запуска, введя команду:
[<your IP address>]: PS C:\> iotstartup remove headless BackgroundApplication1
Служебная программа подтвердит, что фоновое приложение было удалено из списка без головных приложений Startup Apps:
Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee
См. также
Добавление фонового приложения при создании пользовательского образа см. в статье "Создание пакета Appx"