Gestire tutte le eccezioni in WPF

di Cristian Civera, in 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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi