2013-03-07 22 views
4

Я просто встретил странное поведение с обработкой исключений в .Net. (Я использую C# в MS Visual Studio 2008, но один из вопросов, который я видел здесь, казалось, подразумевал, что то, что я вижу, истинно во всем мире .Net) Я пишу обычное приложение WinForm. Я намеренно вызываю необработанное исключение, которое должно быть брошено внутри обработчика события form_load вне любого блока try. Я не получаю уведомления. Если необработанное исключение возникает в обычном методе, появляется сообщение о том, что произошло исключение, и предоставил мне некоторую информацию о проблеме. Но в обработчике код просто тихо выходит из функции, не давая понять кому-то, что это произошло. Если я добавлю блок try/catch, исключение поймается, как ожидалось.Исключение не обрабатывается в событии загрузки формы

Верно ли, что это происходит во всех обработчиках событий? И это ожидаемое поведение? И если да, то это потому, что существует слишком большая опасность возникновения плохих вещей, если обработчик событий неожиданно останавливается?

+0

Возможно, вы создали UnhandledThreadExceptionEventHandler? –

+0

Из того, что я читал, это похоже на ту же проблему, что и этот [вопрос] http://stackoverflow.com/questions/10647551/exceptions-not-being-raised-in-c-just-kicks-out-of-of- the-regular-is-this-a-bug/10652522 # 10652522 – Stephan

+0

Благодарим вас за ответ. Вопрос, на который вы ссылаетесь, говорит о поведении при отладке внутри Visual Studio. Я наблюдал это поведение как внутри, так и снаружи VS. Однако я признаю, что оба раза был сборкой отладки. Я не пробовал свой тест в сборке релизов. –

ответ

1

Независимо от того, находится ли внутри или снаружи ВС, это происходит, когда есть отладчик, присоединенный к процессу. Однако, отладочная версия не имеет значения. Если вы используете вне VS без подключенного отладчика, произойдет необработанное исключение. Вы можете проверить

Why the form load can't catch exception? и VS2010 does not show unhandled exception message in a WinForms Application on a 64-bit version of Windows, для возможных решений.

EDIT: Это поведение относится только к обработчику событий form_load, насколько мне известно.