La Universal Windows Platform consente non solo di costruire applicazioni che siano in grado di girare su più categorie di device differenti (immaginiamo al PC, Surface Hub, XBox e altri), ma anche di costruire applicazioni specifiche per una determinata categoria: solitamente negli script parliamo di quello che succede nel mondo Desktop, ma anche il mondo IoT ha molta importanza e possiamo sfruttare anche in questo settore gli stessi vantaggi di un runtime sicuro e una metodologia di sviluppo che già conosciamo.
Poter controllare un device da remoto e spegnerlo (o mandarlo in standby), in caso di consumi eccessivi (o in caso di errori non risolvibili), può essere fondamentale. La Universal Windows Platform ci consente di farlo attraverso l'installazione delle estensioni per Windows IoT. Per aggiungerle è sufficiente cliccare con il tasto destro sulle reference del progetto e selezionare "Windows IoT Extensions for the UWP" dal menù Universal Windows -> Extensions per creare un'applicazione tailor-made.
Per evitare di incorrere in eccezioni dovute alla mancanza di permessi, è necessario aggiungere al file di manifest un'apposita capability:
<Package ... xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10" IgnorableNamespaces="uap mp iot"> <Capabilities> <iot:Capability Name="systemManagement" /> </Capabilities> <!-- ... -->
Per spegnere il device è quindi sufficiente chiamare il metodo BeginShutdown esposto dalla classe ShutdownManager a cui possiamo passare eventualmente un tempo per ritardare l'operazione (utile se dobbiamo prima effettuare un salvataggio di dati o operazioni simili):
private void Shutdown(int delay) { ShutdownManager.BeginShutdown(ShutdownKind.Shutdown, TimeSpan.FromSeconds(delay)); }
In alternativa allo spegnimento, possiamo anche effettuare un riavvio forzato, semplicemente cambiando la modalità di shutdown:
private void Shutdown(int delay) { ShutdownManager.BeginShutdown(ShutdownKind.Restart, TimeSpan.FromSeconds(delay)); }
In entrambi i casi, l'operazione può essere annullata a patto che la richiesta venga eseguita prima del termine del delay (e dell'esecuzione del comando stesso):
private void CancelShutdown() { ShutdownManager.CancelShutdown(); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare gRPC su App Service di Azure
C# 12: Cosa c'è di nuovo e interessante
Routing statico e PreRendering in una Blazor Web App
Utilizzare QuickGrid di Blazor con Entity Framework
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Migliorare l'organizzazione delle risorse con Azure Policy
Aggiungere interattività lato server in Blazor 8
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Proteggere le risorse Azure con private link e private endpoints
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database