Я пытаюсь завершить работу моего приложения WPF и перехватить исключение, используя новый атрибут .NET 4, указанный выше.
Мне удалось вручную вывести приложение из строя, вызвав Environment.FailFast("crash");
.
(Мне также удалось вывести его из строя с помощью кода Ганса из « Как смоделировать исключение поврежденного состояния в .NET 4? ».)
Приложение вызывает вышеуказанный код сбоя при нажатии на кнопку.
Вот мои обработчики исключений:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
DispatcherUnhandledException += app_DispatcherUnhandledException;
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void app_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//log..
}
Комментарий //log...
, показанный выше, только для иллюстрации; там есть настоящий лог-код.
При запуске в Visual Studio выдается исключение, но оно не «всплывает» до тех блоков обработки исключений.
При работе в автономном режиме (без подключенного отладчика) я не получаю никаких журналов, несмотря на то, что ожидаю.
Почему это так и как заставить обрабатываться код обработки?