Регистрация необработанного исключения независимо от взаимодействия с пользователем

#c# #.net #wpf

Вопрос:

У меня есть приложение WPF на C#, в котором я регистрирую необработанные исключения в файле. Поэтому внутри MainWindow.xaml.cs я определяю обработчик событий следующим образом:

 public MainWindow()
{
InitializeComponent();
//...
this.Dispatcher.UnhandledException  = OnDispatcherUnhandledException;
}
 

а затем я регистрирую исключение следующим образом:

     void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {                
     myLogger.log(myLogPath, e.Exception.ToString(), e.Exception.StackTrace, Logger.LogLevel.Error);           
    }
 

И когда возникает такое исключение, .NET выводит следующее окно сообщения:

введите описание изображения здесь

Дело в том, что если нажать «Продолжить», а затем подождать несколько секунд, исключение будет зарегистрировано. Но если кто-то выходит из окна сообщения без продолжения, исключение не регистрируется.

Я хочу, чтобы исключение регистрировалось, даже если пользователь не нажимает «Продолжить». Есть ли обходной путь для этого или, по крайней мере, заставить окно сообщения выбрать автоматическое продолжение?

Ответ №1:

Установите Handled свойство DispatcherUnhandledExceptionEventArgs to true , выполните ведение журнала и затем выйдите из приложения:

 void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
    e.Handled = true;
    myLogger.log(myLogPath, e.Exception.ToString(), e.Exception.StackTrace, Logger.LogLevel.Error);

    MessageBox.Show("Error...", "caption...", MessageBoxButton.OK, MessageBoxImage.Error);
    Current.Shutdown();
}
 

Вы также должны отобразить свое пользовательское сообщение об ошибке. Общий.Диалоговое окно «Чистая ошибка» не очень полезно или приятно отображать пользователю.