Winforms бесцеремонно завершается с «необработанным исключением» - PullRequest
3 голосов
/ 09 января 2009

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

Тип события: ошибка Источник события: отчеты об ошибках .NET Runtime 2.0 Категория события: нет Код события: 5000 Дата: 1/9/2009 Время: 8:47:44 Пользователь: N / A Компьютер: DADIEHL Описание: Тип события clr20r3, P1 crm.client.exe, P2 1.0.1.0, P3 49667f61, P4 mscorlib, P5 2.0.0.0, P6 471ebc5b, P7 c35, P8 59, P9 system.formatexception, P10 ноль.

Итак, я добавил следующий код в program.cs:

try
{
    Application.Run(new WindowContainer());
}
catch (Exception exc)
{
    new DialogException(exc).ShowDialog();
}

Просто, чтобы я мог поймать любое исключение, но пользователи по-прежнему получают то же сообщение, в котором говорится, что приложение должно выйти. Я не могу воспроизвести это на своем компьютере и, следовательно, не могу использовать отладчик, чтобы сузить его. Кто-нибудь знает способ сбора дополнительной информации или есть идеи, что это за проблема?

Ответы [ 2 ]

15 голосов
/ 09 января 2009

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

Два события, к которым вы можете добавить обработчики:

Добавьте обработчики, которые регистрируют исключение, и у вас будет намного больше информации.

Поведение необработанных исключений в потоках, не связанных с пользовательским интерфейсом, изменено с .NET 1.1 на 2.0. Раньше их просто глотали, но теперь они останавливают приложение. Есть флаг app.config, который вы можете использовать, чтобы выбрать старое поведение, если хотите, но это не очень рекомендуется, поскольку исключение в другом потоке может означать, что ваше приложение теперь нестабильно. Я не могу вспомнить подробности настройки в минуту, но я могу посмотреть их, если хотите.

0 голосов
/ 09 января 2009

Если вы не хотите вносить изменения в код прямо сейчас, я бы, вероятно, использовал WinDbg с расширением SOS, так что вы можете, по крайней мере, получить трассировку стека - очень удобно для таких сбоев.

Прохождение в реальном мире с WinDbg

Вы можете попробовать обработать событие UnhandledExceptionEvent. Из MSDN:

UnhandledExceptionEvent

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