Вот как я справляюсь. Это не красиво, но имейте в виду, что ошибки такого типа никогда не должны проходить отладку как разработчик. Эти ошибки должны быть исправлены до того, как вы приступите к работе (так что ничего страшного). В проекте автозагрузки в коде App.xaml (App.xaml.cs) я поместил следующий код.
- OnStartup, создать обработчик события DispatcherUnhandledException
- В обработчике используйте MessageBox для отображения сообщения. Обратите внимание, что, скорее всего, окно запуска еще не создано, поэтому не пытайтесь поместить его в окно.
- е. Исправить ошибку
- Мне нравится видеть, когда появляются дополнительные внутренние ошибки, поэтому я продолжаю вызывать окно дисплея, пока внутренняя ошибка не станет нулевой.
Я не уверен, почему специальные символы блока кода не форматируют это правильно. Извините за это.
protected override void OnStartup(StartupEventArgs e)
{
// define application exception handler
Application.Current.DispatcherUnhandledException +=
AppDispatcherUnhandledException;
// defer other startup processing to base class
base.OnStartup(e);
}
private void AppDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
runException(e.Exception);
e.Handled = true;
}
void runException(Exception ex)
{
MessageBox.Show(
String.Format(
"{0} Error: {1}\r\n\r\n{2}",
ex.Source, ex.Message, ex.StackTrace,
"Initialize Error",
MessageBoxButton.OK,
MessageBoxImage.Error));
if (ex.InnerException != null)
{
runException(ex.InnerException);
}
}