Ci possono essere diversi scenari che richiedono il riavvio di un'applicazione: dalla validazione di una licenza, allo sblocco di nuovi contenuti, alla fix di uno stato non stabile di un'applicazione, al completamento del setup stesso all'interno dell'app. Fino a pochi giorni fa, l'unica strada percorribile era suggerire all'utente il riavvio dell'applicazione manualmente, oppure forzare la sola chiusura dell'app, nella speranza che l'utente capisse di dover avviare nuovamente l'eseguibile e non lo intuisse come un crash.
A partire dal Fall Creators Update di Windows 10, e più precisamente dalla build 16226, è stata introdotta una nuova API che permette sia la terminazione che il riavvio dell'applicazione stessa, con la possibilità di integrare dei parametri, recuperabili all'avvio successivo. L'API di riferimento è la RequestRestartAsync ed è esposta come un metodo statico all'interno della classe CoreApplication:
var payload = "parametro recuperato al prossimo riavvio"; AppRestartFailureReason result = await CoreApplication.RequestRestartAsync(payload); if (result == AppRestartFailureReason.NotInForeground || result == AppRestartFailureReason.RestartPending || result == AppRestartFailureReason.Other) { // si è verificato un errore }
Per motivi relativi alla privacy e per mitigare il problema che l'utente possa percepire il riavvio come un crash, questa API funziona solamente quando l'app è in modalità Foreground e quindi ben visibile. Se l'applicazione è, ad esempio, in background, ed è necessario riavviare, bisognerà prendere un'azione tale per capire quando ritornerà in foreground e quindi pianificare il riavvio.
Al momento del riavvio, si potranno recuperare tutti i parametri nel modo classico, ovvero dal metodo OnActivated della classe App, in cui il tipo degli argomenti sarà LaunchActivatedEventArgs, mentre il PreviousExecutionState sarà impostato al valore Terminated.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Definire stili a livello di libreria in Angular
Evitare la script injection nelle GitHub Actions
Creare alias per tipi generici e tuple in C#
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Hosting di componenti WebAssembly in un'applicazione Blazor static
Utilizzare gRPC su App Service di Azure
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Disabilitare automaticamente un workflow di GitHub
I più letti di oggi
- Accedere con ASP.NET ad un documento XML creato dall'oggetto recordset di ADO e ASP
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView
- Aumentare la scalabilità di ASP.NET Core Web API con caching client side
- Visualizzare contenuti Fullscreen con HTML5
- Disabilitare un bottone in una pagina HTML pensando all'accessibilità
- Realizzare siti sicuri con ASP.NET Web Pages
- Focus dei tag input con HTML5
- Disponibile la beta di Silverlight 5
- Ricavare lo spazio occupato su disco dal nostro sito