Поделиться через


Developing foreground applications (Разработка приложений переднего плана)

Узнайте о языках, поддерживаемых в Windows 10 IoT Базовая а также о типах приложений UWP и других приложений, поддерживаемых в IoT Core.

Примечание

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

Типы приложений

Приложения универсальной платформы Windows (UWP)

IoT Core — это ос, ориентированная на UWP, и приложения UWP являются основным типом приложений.

универсальная платформа Windows (UWP) — это общая платформа приложений для всех версий Windows 10, включая Windows 10 IoT Базовая. UWP — это эволюция среда выполнения Windows (WinRT). Дополнительные сведения и общие сведения о UWP можно найти здесь.

Visual Studio — это основной инструмент для написания приложений UWP для IoT Core и в целом. Подробный список требований к совместимости для Visual Studio можно найти здесь.

Традиционные приложения UWP

Приложения UWP работают только в IoT Core, как и в других Windows 10 выпусках. Простое пустое приложение Xaml в Visual Studio будет правильно развернуто на устройстве IoT Core так же, как на телефоне или Windows 10 компьютере. Все стандартные языки UWP и шаблоны проектов полностью поддерживаются в IoT Core.

Существует несколько дополнений к традиционной модели приложений UWP для поддержки сценариев Интернета вещей, и любое приложение UWP, которое использует их, потребуется добавить соответствующие сведения в их манифест. В частности, необходимо добавить пространство имен "iot" в манифест этих стандартных приложений UWP.

<Package> Внутри атрибута манифеста необходимо определить iot xmlns и добавить его в список IgnorableNamespaces. Окончательный XML-файл должен выглядеть следующим образом:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

Фоновые приложения

В дополнение к традиционным приложениям пользовательского интерфейса в IoT Core добавлен новый тип приложения UWP под названием "Фоновые приложения". Эти приложения не имеют компонента пользовательского интерфейса, но вместо этого имеют класс, реализующий интерфейс IBackgroundTask. Затем они регистрируют этот класс как StartupTask для запуска при загрузке системы. Так как они по-прежнему являются приложениями UWP, они имеют доступ к одному и тому же набору API и поддерживаются на одном языке. Единственное отличие заключается в отсутствии точки входа в пользовательский интерфейс.

Каждый тип IBackgroundTask получает собственную политику ресурсов. Обычно это ограничивается для повышения времени работы батареи и ресурсов компьютера на устройствах, где эти фоновые приложения являются дополнительными компонентами приложений пользовательского интерфейса переднего плана. На устройствах Интернета вещей фоновые приложения часто являются основной функцией устройства, поэтому эти StartupTasks получают политику ресурсов, которая отражает приложения пользовательского интерфейса переднего плана на других устройствах.

В следующем примере показан код, необходимый для создания фонового приложения C#, которое мигает светодиодным индикатором:

namespace BlinkyHeadlessCS
{
    public sealed class StartupTask : IBackgroundTask
    {
        BackgroundTaskDeferral deferral;
        private GpioPinValue value = GpioPinValue.High;
        private const int LED_PIN = 5;
        private GpioPin pin;
        private ThreadPoolTimer timer;

        public void Run(IBackgroundTaskInstance taskInstance)        {
            deferral = taskInstance.GetDeferral();
            InitGPIO();
            timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500));

        }
        private void InitGPIO()
        {
            pin = GpioController.GetDefault().OpenPin(LED_PIN);
            pin.Write(GpioPinValue.High);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }

        private void Timer_Tick(ThreadPoolTimer timer)
        {
            value = (value == GpioPinValue.High) ? GpioPinValue.Low : GpioPinValue.High;
            pin.Write(value);
        }
    }
}

Подробные сведения о фоновых приложениях можно найти здесь.

Приложения, не относящиеся к UWP

IoT Core поддерживает некоторые традиционные типы приложений Win32, такие как консольные приложения Win32 и службы NT. Эти приложения создаются и работают так же, как и на Windows 10 Desktop. Кроме того, существует шаблон проекта консоли C++ IoT Core, упрощающий создание таких приложений с помощью Visual Studio.

Существует два main ограничения для этих приложений, не относящихся к UWP:

  1. Поддержка устаревшего пользовательского интерфейса Win32 отсутствует: IoT Core не содержит API для создания классических (HWND) Windows. Устаревшие методы, такие как CreateWindow() и CreateWindowEx() или любые другие методы, которые работают с дескрипторами Windows (HWND), недоступны. Следовательно, платформы, зависящие от таких API, включая MFC, Windows Forms и WPF, не поддерживаются в IoT Core.
  2. Только приложения C++: В настоящее время для разработки приложений Win32 в IoT Core поддерживается только C++.

Языки программирования

IoT Core поддерживает широкий спектр языков программирования.

языки In-Box

Традиционные языки UWP по умолчанию поставляются с поддержкой в Visual Studio. Все языки In-Box поддерживают пользовательский интерфейс и фоновые приложения

  • Языки
    • C#
    • C++
    • JavaScript
    • Visual Basic

Arduino Wiring

Arduino Wiring требует скачивания "Основных шаблонов проектов Windows IoT Core" из Visual Studio Tools-Extensions> и диспетчера Обновления. Arduino Wiring поддерживает только фоновые приложения. Вы также можете создавать среда выполнения Windows компоненты с помощью C#, C++ или Visual Basic, а затем ссылаться на эти библиотеки с любого другого языка.

C# и Visual Basic (VB)

C# и VB поддерживаются как приложения UWP и имеют доступ к части платформа .NET Framework, доступной для приложений UWP. Они поддерживают приложения пользовательского интерфейса, созданные с помощью Xaml, а также фоновые приложения. Вы также можете создавать среда выполнения Windows компоненты, которые можно использовать из других поддерживаемых языков.

Примеры:

JavaScript

Вы можете использовать JavaScript для создания приложений пользовательского интерфейса и фоновых приложений. Приложения пользовательского интерфейса работают так же, как и во всех выпусках UWP. Фоновые приложения являются новыми для IoT Core, но просты. В следующем примере кода показаны выходные данные шаблона нового проекта JS:

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409
(function () {
    "use strict";

    // TODO: Insert code here for the startup task

})();

C++

С помощью C++ можно создавать приложения пользовательского интерфейса Xaml или DirectX, а также фоновые проекты UWP и приложения Win32 , не относящиеся к пользовательскому интерфейсу .

Примеры:

Примечание

Для тех, кто планирует написать свое приложение на C++, необходимо проверка флажок UWP C++ при скачивании.

C++ для Visual Studio

?### Arduino Wiring

Благодаря поддержке Arduino Wiring вы можете создавать приложения в Arduino Wiring для многих популярных компонентов и периферийных устройств в экосистеме Интернета вещей.

Руководство по проекту Arduino Wiring содержит полные инструкции по настройке для создания этих приложений. Примеры, скопированные и связанные ниже, помогут вам приступить к созданию собственных. Вы даже можете создавать компоненты WinRT в Arduino , которые затем можно использовать из других языков.

Пример кода Blinky Полный пример кода и документация доступны на нашей странице примеров. Полный код можно найти ниже:

void setup()
{
    // put your setup code here, to run once:

    pinMode(GPIO5, OUTPUT);
}

void loop()
{
    // put your main code here, to run repeatedly:

    digitalWrite(GPIO5, LOW);
    delay(500);
    digitalWrite(GPIO5, HIGH);
    delay(500);
}