Windows Presentation Foundation è un framework che rivoluziona il modo di fare applicazioni e le possibilità grafiche che si hanno a disposizione, ma che di fatto poggia il sistema di gestione degli eventi e degli input allo stesso modo di Windows. Infatti in modo simile alla message pump, in WPF il Dispatcher è il motore responsabile di eseguire le operazioni una dietro l'altra, per input, animazioni ed eventi, secondo una priorità.
Nel caso si verifichi però un'eccezione, il thread su cui gira il Dispatcher normalmente termina causando la completa chiusura dell'applicazione stessa che senza di esso non può funzionare. Poiché è difficile gestire per ogni evento correttamente le eccezioni, per evitare problemi e prevedere il peggio, è possibile intercettare l'evento DispatcherUnhandledException per l'intero Dispatcher così da avere una gestione centralizzata. Nell'argomento si riceve poi l'eccezione e vi è la possibilità di inibire l'errore impostando a true la proprietà Handled.
public class App : Application { protected virtual void OnStartup(StartupEventArgs e) { base.OnStartup(e); this.DispatcherUnhandledException += OnDispatcherError; } void OnDispatcherError(object sender, DispatcherUnhandledExceptionEventArgs e) { // Inibisco tutti gli errori e.Handled = true; // Mostro il messaggio MessageBox.Show(e.Exception.Message); } }
Normalmente il Dispatcher è uno solo (il thread principale) ed è perciò possibile accedere a tale oggetto direttamente con la proprietà Application.Current.DispatcherUnhandledException oppure direttamente nella classe Application come fatto nell'esempio precedente. Si ricordi infine che comunque è sempre necessario gestire le eccezioni in modo specifico prevedendole a seconda delle operazioni che si stanno svolgendo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub