Zachytávání neošetřených výjimek ve WPF


Občas se stane, že v programu probublá neostřená výjimka a aplikace pak spadne. Ale nemusí to tak být, stačí definovat a použít událost DispatcherUnhandledException třídy Application.

Událost je možné přiřadit ručně v konstruktoru třídy Application nebo klasicky pomocí XAMLu v souboru App.xaml:

<application ... 
             dispatcherunhandledexception="App_DispatcherUnhandledException">
</application>

V nejjednodušším případě je definice události následující:

public partial class App : Application
{
  protected void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
  {
    MessageBox.Show(string.Format("V aplikaci došlo k chybě:n{0}", e.Exception), 
                    "Error", 
                    MessageBoxButton.OK, 
                    MessageBoxImage.Error);
    e.Handled = true;
  }
}

Ale místo MessageBoxu by samozřejmě bylo lepší si vytvořit např. nějaké okno, které bude zobrazovat více informací a poskytovat interaktivitu s nápovědou nebo nahlášením chyby…

Viz dále:

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx
http://www.codeproject.com/Articles/90866/Unhandled-Exception-Handler-For-WPF-Applications.aspx

, , ,

Komentáře jsou uzavřeny.