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
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Usare il colore CSS per migliorare lo stile della pagina
Collegare applicazioni server e client con .NET Aspire
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Loggare le query più lente con Entity Framework
Fornire parametri ad un Web component HTML
Managed deployment strategy in Azure DevOps
Gestire gli accessi con Token su Azure Container Registry
Introduzione alle Container Queries
Eseguire query in contemporanea con EF
I più letti di oggi
- Ricevere un web hook con le Logic App di Azure
- Routing HTTP con i proxy delle Azure Function
- Gestione dei sottotitoli con il tag video di HTML5
- Applicare una rotazione con i CSS alle glyph di Bootstrap
- Restituire un file per il download tramite ASP.NET Web API
- Auto scale delle Azure Web App con Application Insights
- Impostare il tema light o dark utilizzando i CSS