Vi sono situazioni in cui nella propria applicazione è necessario forzare la chiusura dell'applicazione. Si pensi ad esempio a popup di autorizzazione a certe attività o policy che, se rifiutate, non permettono all'app di proseguire, oppure ancora, in seguito al tap su una tile o una toast, eseguite le attività richieste, si vuole terminare l'app senza che l'utente debba premere necessariamente un pulsante.
In queste situazioni, diversamente dalle API di XNA che per questioni di policy non è possibile utilizzare, non è presente un metodo apposito per forzare la chiusura dell'app, ma è possibile sfruttare un piccolo trucchetto per raggiungere questo scopo.
L'idea è semplice: basta lanciare un'eccezione a noi conosciuta e automaticamente l'app viene chiusa dal sistema. Per non gestirla è opportuno che nell'evento Application.UnhandledException, che solitamente viene intercettato nell'App.xaml.cs, non si inibisca l'errore ne lo si notifichi all'utente, come nell'esempio:
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { // Eccezione per uscire, non faccio niente if (e.ExceptionObject is QuitException) return; // Inibisco l'errore così l'app prosegue normalmente e.Handled = true; }
A questo punto, quando si vuole chiudere l'applicazione è sufficiente lanciare l'eccezione.
public class QuitException : Exception { } throw new QuitException();
Nell'esempio si sfrutta un'eccezione personalizzata di tipo QuitException per semplificare la sua identificazione e riconoscerla facilmente anche quando questa comparirà nei report dei crash dell'applicazione, che per ovvie ragioni si può ignorare.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il refresh dei dati di una QuickGrid di Blazor
Eseguire script pre e post esecuzione di un workflow di GitHub
Gestione dei nomi con le regole @layer in CSS
Configurare lo startup di applicazioni server e client con .NET Aspire
Utilizzare gRPC su App Service di Azure
Configurare e gestire sidecar container in Azure App Service
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Gestione dell'annidamento delle regole dei layer in CSS
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Eliminare una project wiki di Azure DevOps
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Collegare applicazioni server e client con .NET Aspire
I più letti di oggi
- #lightswitch 2012 supporta nativamente #html5, #jquery e #jquerymobile. è stato mostrato girare su #ipad a #msteched
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Velocity arriva alla CTP3
- Mono 2.8 aggiunge .NET Framework 4, ASP.NET 4.0 e MVC 2
- Prima CTP per Portable Library Tools
- VS 2005 CTP già su MSDN Universal
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Information Card Kits for ASP.NET and HTML
- Web Camp - HTML5 per il web di oggi
- Una preview della prossima versione di #VisualStudio con cui creare #metrostyle app http://aspitalia.com/build-win8 #BldWin