#147 - Gestire tutte le eccezioni in WPF
di Cristian Civera, in Windows Presentation Foundation, 13 novembre 2009
Archiviato in: .NET Framework, .NET Framework 3.0, .NET Framework 3.5, Windows Presentation Foundation
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.
Approfondimenti
-
#74 - Paginazione di dati con il controllo DataPager in Silverlight 3.0
-
#144 - Utilizzare il metodo ForEach di LINQ per eseguire un'azione su ogni oggetto di una lista
-
LINQ to Reflection - Parte tre
-
WPF e Siverlight: Dispatcher e finestre modali
-
Rilasciato ASP.NET MVC 2 Beta
-
#107 - Passare un Expression di Entity Framework attraverso un servizio WCF
-
.NET Framework 4.0 beta 1: Workflow Foundation 4.0
-
Template per generare classi POCO con Entity Framework 4.0
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding
-
Rilasciato ASP.NET MVC 2 Release Candidate
-
ModelVirtualCasting: un'applicazione completa per .NET Framework 4.0 e Silverlight 4.0
-
MetadataDiffViewer: differenze tra i framework

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.