WPF: приложение не падает, если в событии Loaded возникает исключение - PullRequest
6 голосов
/ 09 мая 2011

Я создал новое приложение WPF и добавил обработчик события Loaded в MainWindow:

Loaded += (s, e) => { throw new Exception("AAAA!"); };

Затем я запускаю это приложение из Visual C #, и приложение не вылетает и не показывает необработанное исключение.

Я ожидаю, что произойдет сбой, и это приложение действительно будет зависать на других компьютерах. Но почему это работает на моем?

Обновление Добавлен скриншот: screenshot

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

Чтобы перехватить исключение, вам нужно либо выполнить попытку / перехватить в методе Loaded, либо вы можете указать Диспетчеру уведомить вас о возникновении необработанного исключения.

Попробуйте выполнить следующее, например, в методе OnStartup вашего приложения:

App.Current.DispatcherUnhandledException += (s,e) => 
{ 
  // Handle the exception here
  var ex = e.Exception; 
};

Редактировать:

Если вы хотите, чтобы приложение аварийно завершилосьзатем попробуйте следующее:

App.Current.DispatcherUnhandledException += (s,e) => 
{ 
  // this should cause your application to crash :-)
  throw new Exception("Now it should crash!", e.Exception);
};

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

4 голосов
/ 09 мая 2011

Событие Loaded, вероятно, вызывается из фонового потока. Когда в этом потоке возникает исключение, оно будет прервано, но не повлияет на ваш основной поток приложения. Такое поведение можно увидеть во многих обработчиках событий, например, обработчик события Timer_Elapsed также не повлияет на ваш код в целом. Это не означает, что вы не должны заботиться об исключениях внутри такого кода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...