Диалог необработанных исключений Windows Forms - PullRequest
4 голосов
/ 13 апреля 2010

Я хочу получать диалог необработанных исключений Windows Forms по умолчанию всякий раз, когда мое приложение C # встречает U-E. В 2005 году, когда я отключаю отладку jit в app.conf, вот так:

<configuration>
   <system.windows.forms jitDebugging="false" />
<configuration>

приложение ведет себя корректно и отображает диалоговое окно Windows Forms U-E по умолчанию с кнопками «Продолжить», «Выход», стек вызовов и все.

Однако в версии 2008 года на одной и той же машине или на другом, несмотря на то, что я использую jit, я все равно получаю диалоговое окно «Необработанные исключения» по умолчанию .NET с кнопками «Отладка», «Отправить отчет» и «Не отправлять».

Как сделать так, чтобы приложение vs 2008 работало так же, как и приложение 2005 года, для отображения диалогового окна Windows Forms U-E?

Пожалуйста, не рекомендуется использовать

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

только потому, что я не использую пользовательский обработчик в своем проекте vs 2005, почему я использовал бы в vs 2008? Я хочу позволить этой работе делать CLR.

Любая помощь приветствуется

Ответы [ 2 ]

13 голосов
/ 13 апреля 2010

Вы говорите о различных функциях обработки исключений. ThreadExceptionDialog , который вы видите с помощью кнопок Quit и Continue, запускается событием Application.ThreadException . Оно будет появляться только в том случае, если исключение возникает в потоке пользовательского интерфейса, когда обработчик событий, который запускается в ответ на сообщение Windows, генерирует исключение. Однако любое исключение в рабочем потоке будет бомбить программу через AppDomain.UnhandledException.

Вы не можете справиться с последним, программа не работает и не может продолжаться. Отображать ThreadExceptionDialog бессмысленно.

Вы можете сделать бомбу программы последовательно, отключив событие ThreadException, вызвав Application.SetUnhandledExceptionMode (). Теперь каждое необработанное исключение будет вызывать AppDomain.UnhandledException и завершать работу программы. Это, вероятно, не то, что вы хотите, но мудрый выбор.

Также обратите внимание, что событие ThreadException отключается при запуске программы с отладчиком. По-видимому, именно поэтому вы видите разницу в VS2008. В противном случае не было никаких изменений.

0 голосов
/ 13 апреля 2010

Ответ Ханса Пассанта кажется разумным. Тем не менее, даже если вы говорите, что не хотите, я все равно рекомендую обработчик на AppDomain.CurrentDomain.UnhandledException, чтобы убедиться, что вы определяете, что происходит, когда ваше приложение неожиданно падает.

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