Condividi tramite


Sviluppo di applicazioni in primo piano

Informazioni sulle lingue supportate in Windows 10 IoT Core e sui tipi di app UWP e non UWP supportati in IoT Core.

Nota

Visual Studio genererà un errore di difficile interpretazione quando viene distribuito in un'immagine di RS5 IoT (o RS4 con OpenSSH abilitato) a meno che non sia installato un SDK di RS4 o versione successiva accessibile a Visual Studio.

Tipi di applicazioni

App UWP (Universal Windows Platform)

IoT Core è un sistema operativo incentrato sulla piattaforma UWP e le app UWP sono il tipo di app principale.

piattaforma UWP (Universal Windows Platform) (UWP) è una piattaforma di app comune in tutte le versioni di Windows 10, tra cui Windows 10 IoT Core. La piattaforma UWP è un'evoluzione di Windows Runtime (WinRT). Altre informazioni e una panoramica della piattaforma UWP sono disponibili qui.

Visual Studio è lo strumento principale per la scrittura di app UWP per IoT Core e in generale. Un elenco dettagliato dei requisiti di compatibilità per Visual Studio è disponibile qui.

App UWP tradizionali

Le app UWP funzionano solo su IoT Core, proprio come fanno in altre edizioni Windows 10. Un'app Xaml semplice e vuota in Visual Studio verrà distribuita correttamente nel dispositivo IoT Core esattamente come in un telefono o in un PC Windows 10. Tutti i linguaggi e i modelli di progetto UWP standard sono completamente supportati in IoT Core.

Esistono alcune aggiunte al modello di app UWP tradizionale per supportare gli scenari IoT e qualsiasi app UWP che sfrutta tali app richiederà le informazioni corrispondenti aggiunte al manifesto. In particolare, lo spazio dei nomi "iot" deve essere aggiunto al manifesto di queste app UWP standard.

All'interno dell'attributo <Package> del manifesto è necessario definire iot xmlns e aggiungerlo all'elenco IgnorableNamespaces. Il codice XML finale avrà un aspetto simile al seguente:

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

App in background

Oltre alle app dell'interfaccia utente tradizionali, IoT Core ha aggiunto un nuovo tipo di app UWP denominato "Applicazioni in background". Queste applicazioni non hanno un componente dell'interfaccia utente, ma hanno invece una classe che implementa l'interfaccia "IBackgroundTask". Registrano quindi la classe come "StartupTask" per l'esecuzione all'avvio del sistema. Poiché sono ancora app UWP, hanno accesso allo stesso set di API e sono supportate dalla stessa lingua. L'unica differenza è che non esiste alcun punto di ingresso dell'interfaccia utente.

Ogni tipo di IBackgroundTask ottiene i propri criteri di risorsa. Questo è in genere restrittivo per migliorare la durata della batteria e le risorse del computer nei dispositivi in cui queste app in background sono componenti secondari delle app dell'interfaccia utente in primo piano. Nei dispositivi IoT, le app in background sono spesso la funzione principale del dispositivo e quindi questi StartupTask ottengono criteri di risorsa che rispecchiano le app dell'interfaccia utente in primo piano in altri dispositivi.

L'esempio seguente illustra il codice necessario per compilare un'app in background C# che lampeggia un LED:

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

Qui sono disponibili informazioni approfondite sulle app in background.

App non UWP

IoT Core supporta alcuni tipi di app Win32 tradizionali, ad esempio App console Win32 e SERVIZI NT. Queste app vengono compilate ed eseguite allo stesso modo di Windows 10 Desktop. È inoltre disponibile un modello di progetto console C++ di IoT Core per semplificare la compilazione di tali app con Visual Studio.

Esistono due limitazioni principali per queste applicazioni non UWP:

  1. Nessun supporto legacy dell'interfaccia utente Win32: IoT Core non contiene API per la creazione di Windows classiche (HWND). I metodi legacy, ad esempio CreateWindow() e CreateWindowEx() o qualsiasi altro metodo che gestisce gli handle di Windows (HWND) non sono disponibili. Successivamente, i framework che dipendono da tali API, tra cui MFC, Windows Forms e WPF, non sono supportati in IoT Core
  2. Solo app C++: Attualmente, solo C++ è supportato per lo sviluppo di app Win32 in IoT Core.

Linguaggi di programmazione

IoT Core supporta un'ampia gamma di linguaggi di programmazione.

lingue In-Box

I linguaggi UWP tradizionali vengono forniti con il supporto in Visual Studio per impostazione predefinita. Tutte le lingue In-Box supportano sia l'interfaccia utente che le applicazioni in background

  • Linguaggi
    • C#
    • C++
    • JavaScript
    • Visual Basic

Cablaggio Arduino

Arduino Wiring richiede il download dei "Modelli di progetto Windows IoT Core" da Visual Studio Tools-Extensions> e Aggiornamenti Manager. Arduino Wiring supporta solo applicazioni in background. È anche possibile compilare Windows Runtime Components usando C#, C++o Visual Basic e quindi fare riferimento a tali librerie da qualsiasi altro linguaggio.

C# e Visual Basic (VB)

C# e VB sono entrambi supportati come app UWP e hanno accesso alla parte di .NET Framework disponibile per le applicazioni UWP. Supportano le app dell'interfaccia utente create con Xaml e le app in background. È anche possibile compilare Windows Runtime Componenti che possono essere usati da altri linguaggi supportati.

Esempi:

JavaScript

È possibile usare JavaScript per compilare sia l'interfaccia utente che le app in background. Le app dell'interfaccia utente funzionano allo stesso modo in tutte le edizioni UWP. Le app in background sono nuove per IoT Core, ma sono semplici. Il codice di esempio seguente mostra l'output del modello di nuovo progetto 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++

Con C++ puoi creare app xaml o directX per l'interfaccia utente, oltre a progetti in background UWP e app Win32 non dell'interfaccia utente .

Esempi:

Nota

Per coloro che pianificano di scrivere l'app in C++, dovrai selezionare la casella di controllo UWP C++ al momento del download.

C++ per Visual Studio

Cablaggio Arduino ?###

Con il supporto di Arduino Wiring è possibile creare app in Arduino Cablaggio per molti componenti e periferiche comuni nell'ecosistema IoT.

La Guida al progetto di cablaggio Arduino fornisce istruzioni complete su come configurare queste app. Gli esempi copiati e collegati di seguito consentono di iniziare a creare i propri elementi. È anche possibile compilare componenti WinRT in Arduino che possono quindi essere usati da altri linguaggi.

Codice di esempio Blinky Il codice di esempio completo e la documentazione sono disponibili nella pagina degli esempi ed è possibile trovare il codice completo seguente:

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