Entwickeln von Vordergrundanwendungen

Erfahren Sie mehr über die Sprachen, die auf Windows 10 IoT Core unterstützt werden, sowie über die UWP- und Nicht-UWP-App-Typen, die in IoT Core unterstützt werden.

Hinweis

Visual Studio generiert beim Bereitstellen auf einem RS5-IoT-Image (oder RS4 mit OpenSSH-Aktivierung) einen kryptischen Fehler, sofern kein SDK für RS4 oder höher installiert ist, auf das Visual Studio zugreifen kann.

Anwendungstypen

Universelle Windows-Plattform-Apps (UWP)

IoT Core ist ein UWP-zentriertes Betriebssystem, und UWP-Apps sind der primäre App-Typ.

Universal Windows Platform (UWP) ist eine allgemeine App-Plattform für alle Versionen von Windows 10, einschließlich Windows 10 IoT Core. UWP ist eine Weiterentwicklung von Windows Runtime (WinRT). Weitere Informationen und eine Übersicht zu UWP finden Sie hier.

Visual Studio ist das primäre Tool zum Schreiben von UWP-Apps für IoT Core und im Allgemeinen. Eine ausführliche Liste der Kompatibilitätsanforderungen für Visual Studio finden Sie hier.

Herkömmliche UWP-Apps

UWP-Apps funktionieren nur unter IoT Core, genau wie in anderen Windows 10 Editionen. Eine einfache, leere XAML-App in Visual Studio wird ordnungsgemäß auf Ihrem IoT Core-Gerät bereitgestellt, genau wie auf einem Smartphone oder einem Windows 10 PC. Alle UWP-Standardsprachen und -Projektvorlagen werden in IoT Core vollständig unterstützt.

Es gibt einige Ergänzungen zum herkömmlichen UWP-App-Modell zur Unterstützung von IoT-Szenarien, und jede UWP-App, die sie nutzt, benötigt die entsprechenden Informationen, die ihrem Manifest hinzugefügt werden. Insbesondere muss der Namespace "iot" dem Manifest dieser UWP-Standard-Apps hinzugefügt werden.

Innerhalb des <Package> -Attributs des Manifests müssen Sie die iot-xmlns definieren und der Liste IgnorableNamespaces hinzufügen. Die endgültige Datei sollte wie folgt aussehen:

<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">

Hintergrund-Apps

Neben den herkömmlichen UI-Apps wurde in IoT Core ein neuer UWP-App-Typ namens „Hintergrundanwendungen“ hinzugefügt. Diese Anwendungen besitzen keine UI-Komponente, sondern eine Klasse, die die Schnittstelle „IBackgroundTask“ implementiert. Anschließend registrieren sie diese Klasse als „StartupTask“, die beim Systemstart ausgeführt werden soll. Da es sich immer noch um UWP-Apps handelt, haben sie Zugriff auf den gleichen Satz von APIs und werden von derselben Sprache unterstützt. Der einzige Unterschied besteht darin, dass es keinen Benutzeroberflächen-Einstiegspunkt gibt.

Jeder Typ von IBackgroundTask erhält seine eigene Ressourcenrichtlinie. Diese ist in der Regel restriktiv, um die Akkulaufzeit und die Computerressourcen auf Geräten zu verbessern, auf denen diese Hintergrund-Apps sekundäre Komponenten von Vordergrund-UI-Apps sind. Bei IoT-Geräten sind Hintergrund-Apps häufig die primäre Funktion des Geräts. Daher erhalten diese StartupTasks eine Ressourcenrichtlinie, die Vordergrund-UI-Apps auf anderen Geräten spiegelt.

Das folgende Beispiel zeigt den Code, der zum Erstellen einer C#-Hintergrund-App erforderlich ist, die eine LED blinkt:

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);
        }
    }
}

Ausführliche Informationen zu Hintergrund-Apps finden Sie hier.

Nicht-UWP-Apps

IoT Core unterstützt bestimmte herkömmliche Win32-App-Typen wie Win32-Konsolen-Apps und NT-Dienste. Diese Apps werden auf die gleiche Weise erstellt und ausgeführt wie auf Windows 10 Desktop. Darüber hinaus gibt es eine IoT Core C++-Konsolenprojektvorlage, um das Erstellen solcher Apps mithilfe von Visual Studio zu erleichtern.

Für diese Nicht-UWP-Anwendungen gelten zwei Haupteinschränkungen:

  1. Keine Unterstützung der Win32-Benutzeroberfläche: IoT Core enthält keine APIs zum Erstellen von klassischen Windows (HWND). Legacymethoden wie CreateWindow() und CreateWindowEx() oder andere Methoden, die mit Windows-Handles (HWNDs) arbeiten, sind nicht verfügbar. Anschließend werden Frameworks, die von solchen APIs wie MFC, Windows Forms und WPF abhängen, in IoT Core nicht unterstützt.
  2. Nur C++-Apps: Derzeit wird nur C++ für die Entwicklung von Win32-Apps in IoT Core unterstützt.

Programmiersprachen

IoT Core unterstützt eine Vielzahl von Programmiersprachen.

In-Box Sprachen

Herkömmliche UWP-Sprachen werden standardmäßig in Visual Studio unterstützt. Alle In-Box Sprachen unterstützen sowohl Benutzeroberflächen- als auch Hintergrundanwendungen.

  • Sprachen
    • C#
    • C++
    • JavaScript
    • Visual Basic

Arduino-Verdrahtung

Arduino Wiring erfordert den Download der "Windows IoT Core-Projektvorlagen" aus dem Visual Studio Tools-Extensions> und Aktualisierungen Manager. Arduino Wiring unterstützt nur Hintergrundanwendungen. Sie können auch Windows-Runtime Komponenten mit C#, C++ oder Visual Basic erstellen und dann aus einer beliebigen anderen Sprache auf diese Bibliotheken verweisen.

C# und Visual Basic (VB)

C# und VB werden beide als UWP-Apps unterstützt und haben Zugriff auf den Teil der .NET Framework, der für UWP-Anwendungen verfügbar ist. Sie unterstützen ui-Apps, die mit Xaml erstellt wurden, sowie Hintergrund-Apps. Sie können auch Windows-Runtime Komponenten erstellen, die aus anderen unterstützten Sprachen verwendet werden können.

Beispiele:

JavaScript

Sie können JavaScript verwenden, um sowohl Benutzeroberflächen- als auch Hintergrund-Apps zu erstellen. Die Ui-Apps funktionieren in allen UWP-Editionen genauso. Die Hintergrund-Apps sind neu für IoT Core, aber einfach. Der folgende Beispielcode zeigt die Ausgabe der JS New Project-Vorlage:

// 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++

Mit C++ können Sie Xaml- oder DirectX-UI-Apps sowie UWP-Hintergrundprojekte und Nicht-UI-Win32-Apps erstellen.

Beispiele:

Hinweis

Wenn Sie planen, ihre App in C++ zu schreiben, müssen Sie beim Herunterladen das Kontrollkästchen UWP C++ aktivieren.

C++ für Visual Studio

?### Arduino-Verdrahtung

Mit Arduino Wiring-Unterstützung können Sie Apps in Arduino Wiring für viele gängige Komponenten und Peripheriegeräte im IoT-Ökosystem erstellen.

Unser Arduino-Kabelprojektleitfaden enthält vollständige Anweisungen zum Einrichten dieser Apps. Die unten kopierten und verknüpften Beispiele helfen Ihnen bei den ersten Schritten beim Erstellen ihrer eigenen. Sie können sogar WinRT-Komponenten in Arduino erstellen , die dann aus anderen Sprachen verwendet werden können.

Blinky-Beispielcode Den vollständigen Beispielcode und die Dokumente finden Sie auf unserer Seite mit den Beispielen. Den vollständigen Code finden Sie unten:

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);
}