#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();
}
Вы также должны отобразить свое пользовательское сообщение об ошибке. Общий.Диалоговое окно «Чистая ошибка» не очень полезно или приятно отображать пользователю.