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
Evitare il flickering dei componenti nel prerender di Blazor 8
Creare un'applicazione React e configurare Tailwind CSS
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Reactive form tipizzati con modellazione del FormBuilder in Angular
C# 12: Cosa c'è di nuovo e interessante
Cambiare la chiave di partizionamento di Azure Cosmos DB
Utilizzare Azure AI Studio per testare i modelli AI
Gestire liste di tipi semplici con Entity Framework Core
Usare il colore CSS per migliorare lo stile della pagina
Generare velocemente pagine CRUD in Blazor con QuickGrid
Usare le collection expression per inizializzare una lista di oggetti in C#
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI