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
Sostituire la GitHub Action di login su private registry
Determinare lo stato di un pod in Kubernetes
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Configurare policy CORS in Azure Container Apps
Code scanning e advanced security con Azure DevOps
Creazione di componenti personalizzati in React.js con Tailwind CSS
Eseguire operazioni con timeout in React
Eseguire una query su SQL Azure tramite un workflow di GitHub
Reactive form tipizzati con modellazione del FormBuilder in Angular
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Reactive form tipizzati con FormBuilder in Angular
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)