Condividi tramite


Sviluppo di applicazioni in background

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.

Le applicazioni in background sono applicazioni che non hanno un'interfaccia utente diretta. Dopo la distribuzione e la configurazione, queste applicazioni vengono avviate all'avvio del computer ed eseguite continuamente senza limitazioni di utilizzo delle risorse di gestione della durata dei processi. Se si arrestano in modo anomalo o escono dal sistema, verranno riavviati automaticamente. Queste applicazioni in background hanno un modello di esecuzione molto semplice. I modelli creano una classe che implementa l'interfaccia "IBackgroundTask" e genera il metodo "Run" vuoto. Questo metodo "Run" è il punto di ingresso dell'applicazione.

Attività in background

Esiste un punto critico da notare: per impostazione predefinita, l'applicazione verrà arrestata al termine del metodo di esecuzione. Ciò significa che le app che seguono il modello IoT comune di esecuzione di un server in attesa di input o in un timer troveranno l'uscita prematura dell'app. Per evitare che ciò accada, è necessario chiamare il metodo "GetDeferral" per impedire all'applicazione di uscire. Altre informazioni sul modello di rinvio sono disponibili qui.

Da dove è possibile installare le applicazioni in background?

È possibile scaricare e installare i modelli IoT per abilitare le applicazioni in background da Visual Studio Gallery qui. In alternativa, i modelli sono disponibili cercando Windows IoT Core Project Templates in Visual Studio Gallery o direttamente da Visual Studio nella finestra di dialogo Estensione e aggiornamenti (Estensioni e aggiornamenti online degli strumenti > > ).

Quali lingue sono disponibili?

I modelli di applicazione in background (IoT) sono disponibili per:

  • 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

Come vengono usate le applicazioni in background?

La creazione di un'applicazione in background è molto simile alla creazione di un'attività in background. All'avvio dell'applicazione in background, viene chiamato il metodo Run:

public void Run(IBackgroundTaskInstance taskInstance)
{
}

Al termine del metodo Run, a meno che non venga creato un oggetto di rinvio, l'applicazione in background termina. La pratica comune, per la programmazione asincrona consiste nell'accettare un differire come segue:

private BackgroundTaskDeferral deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
    deferral = taskInstance.GetDeferral();

    //
    // TODO: Insert code to start one or more asynchronous methods
    //
}

Una volta acquisito un differire, l'applicazione in background continuerà fino a quando non viene chiamato il metodo Complete dell'oggetto differire.

deferral.Complete();

Come si avviano le applicazioni in background?

Questa domanda può essere suddivisa nella distribuzione e nella chiamata.

Per distribuire un'applicazione in background, è possibile:

  • Usare F5 di Visual Studio (che compilerà, distribuirà e richiamerà). Per altri dettagli, vedere l'esempio Hello World in cui viene descritto come distribuire e avviare da Visual Studio.

Nota

In questo modo l'applicazione in background non verrà configurata per l'avvio all'avvio del dispositivo.

  • Creare un'appX in Visual Studio selezionando Crea pacchetti di app in Project > Store > . Dopo aver creato un'appX, è possibile usare Windows Device Portal per distribuirlo nel dispositivo Windows 10 IoT Core.

Per richiamare un'applicazione in background, è possibile:

  • Come accennato in precedenza, la funzionalità F5 di Visual Studio distribuirà e avvierà immediatamente l'applicazione in background.

Nota

In questo modo l'applicazione in background non verrà configurata per l'avvio all'avvio del dispositivo.

  • Per un'applicazione in background distribuita in un dispositivo IoT, è possibile usare l'utilità iotstartup.exe per configurare l'applicazione in background da avviare all'avvio del dispositivo. Per specificare l'applicazione in background come app di avvio, seguire queste istruzioni (sostituire il nome dell'app per BackgroundApplication1 quanto segue):
  1. Avviare una sessione di PowerShell (PS) con il dispositivo Windows IoT Core come descritto qui.

  2. Dalla sessione PS digitare:

    [<your IP address>]: PS C:\> iotstartup list BackgroundApplication1

  3. Dovrebbe essere visualizzato il nome completo dell'applicazione in background, ad esempio simile al seguente:

    Headed : BackgroundApplication1-uwp_cqewk5knvpvee!App Headless : BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee

  4. L'utilità conferma che l'applicazione in background è un'applicazione "headless" e viene installata correttamente. È probabile che venga visualizzata anche una voce In testa per le applicazioni in background, ma questo può essere ignorato.

  5. Ora, è facile impostare questa app come "App di avvio". È sufficiente digitare il comando :

    [<your IP address>]: PS C:\> iotstartup add headless BackgroundApplication1

  6. L'utilità verifica che l'applicazione in background sia stata aggiunta all'elenco di "App di avvio" headless:

    Added Headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpveeplication1

  7. Procedere e riavviare il dispositivo Windows IoT Core. Dalla sessione PS è possibile eseguire il comando di arresto:

    [<your IP address>]: PS C:\> shutdown /r /t 0

  8. Dopo il riavvio del dispositivo, l'applicazione in background verrà avviata automaticamente e Windows 10 IoT Core verificherà che venga riavviato ogni volta che si arresta.

    Nota

    Dopo aver registrato un'app in background per l'esecuzione automatica, se l'app viene chiusa o si arresta in modo anomalo, verrà riavviata automaticamente. L'app non viene informata del motivo per cui è in corso l'avvio o il riavvio, quindi se vuoi eseguire un'azione speciale su un riavvio dovrai tenere traccia dello stato dell'app nell'app.

  9. È possibile rimuovere l'applicazione in background dall'elenco di app di avvio headless digitando il comando :

    [<your IP address>]: PS C:\> iotstartup remove headless BackgroundApplication1

  10. L'utilità conferma che l'applicazione in background è stata rimossa dall'elenco di "App di avvio" headless:

    Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee

Vedi anche

Per aggiungere un'app in background durante la compilazione di un'immagine personalizzata, vedere Creare un pacchetto Appx