от
Я поддерживаю .Чистая 1.1 приложения и одна из вещей, мне была поставлена задача-убедиться, что пользователь не видит каких-либо недружественных уведомления об ошибках. Я добавил обработчики
Application.ThreadException
и
AppDomain.CurrentDomain.UnhandledException
, которые вам называют. Моя проблема заключается в том, что стандартный диалог ошибки CLR-это по-прежнему отображается (до обработчика исключений называется). Джефф рассказывает об этой проблеме в своем блоге здесь и здесь. Но там нет решения. Так что это стандартный способ .Net версии 1.1 для обработки неперехваченных исключений и отображать диалоговое поле? Ответ Джеффа был отмечен как правильный ответ, потому что по ссылке он предоставил наиболее полную информацию о том, как сделать то, что нужно.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

6 Ответы

0 голосов
от
Я поддерживаю .Чистая 1.1 приложения и одна из вещей, мне была поставлена задача-убедиться, что пользователь не видит каких-либо недружественных уведомления об ошибках. Я добавил обработчики
Application.ThreadException
и
AppDomain.CurrentDomain.UnhandledException
, которые вам называют. Моя проблема заключается в том, что стандартный диалог ошибки CLR-это по-прежнему отображается (до обработчика исключений называется). Джефф рассказывает об этой проблеме в своем блоге здесь и здесь. Но там нет решения. Так что это стандартный способ .Net версии 1.1 для обработки неперехваченных исключений и отображать диалоговое поле? Ответ Джеффа был отмечен как правильный ответ, потому что по ссылке он предоставил наиболее полную информацию о том, как сделать то, что нужно.
0 голосов
от
Да, в Windows формы вы определенно должны быть в состоянии заставить его работать. Единственное, что вы должны следить за то, что происходит в разных потоках. У меня есть старый код проекта статьи здесь, которые должны помочь: Обработка Фрэндли Исключения Пользователей
0 голосов
от
Домен приложений.События unhandledexception событие, а не глобальный обработчик исключений. Это значит, к тому времени он вырос, ваша заявка уже находится на пути в канализацию, и ты ничего не можешь с этим поделать, кроме заниматься уборкой и ведение журнала ошибок. Что происходило за кулисами такая: базы обнаружены за исключением, шли вверх по стеку вызовов до самого верха, не нашел обработчики, что бы оправиться от ошибки, так и не смог определить, если это безопасно, чтобы продолжить выполнение. Итак, все началось с последовательности отключения и загорелся такому событию, как вежливость, поэтому вы можете отдать дань уважения своему уже-обречены процесс. Это происходит, когда исключение левой обрабатываются в главном потоке. Нет единой точки решение такого рода ошибки. Нужно поставить реальный обработчик исключений (в блок catch) перед все места, где эта ошибка возникает, и направить его (например) глобальный обработчик метод/класс, который будет определить, если это безопасно, чтобы просто отчитаться, а дальше, основываясь на тип исключения и/или содержимого. Редактировать: можно отключить (=рубить) механизм сообщения об ошибке встроенный в Windows, поэтому в обязательном порядке "аварии и сжечь" диалоговое окно не отображается, когда приложение падает. Однако, это вступает в силу для всех приложений в системе, а не только свои собственные.
0 голосов
от
Необрабатываемое исключение в поведение .Объем 1.х Windows приложения форм зависит от: Тип потока, вызвавшего исключение Произошел ли он в окне обработки сообщений Ли отладчик был присоединен к процессу Реестр DbgJitDebugLaunchSetting установка В jitDebugging флаг в приложение.Конфиг Ли вы обошли окна формы обработчик исключений Ли вы обрабатываться событие исключения среды CLR Фазы Луны По умолчанию поведение необработанных исключений: Если происходит исключение в главном потоке при перекачке окно сообщений, он перехватил окна формы обработчик исключений. Если происходит исключение в главном потоке при перекачке окно сообщения, она будет завершить процесс приложения, если он не перехватил окна формы обработчик исключений. Если исключение возникает на инструкцию, пул потоков, или метод завершения потока, он проглотил средой CLR. Точки соприкосновения для необработанное исключение: Окна формы обработчик исключений. В JIT-отладки реестра переключатель DbgJitDebugLaunchSetting. Среда CLR необработанное событие исключение. Форма Windows встроенную обработку исключений по умолчанию выполняет следующие действия: Ловит необработанное исключение при: исключение в основном потоке и не подключен отладчик. исключение происходит во время обработки сообщения. jitDebugging = false в приложение.Конфиг. Показывает диалоговое окно для пользователя и предотвращает завершение работы приложения. Вы можете отключить последняя поведение, установив jitDebugging = true в приложение.Конфиг. Но помните, что это может быть ваш последний шанс, чтобы остановить завершение работы приложения. Так что следующий шаг, чтобы поймать необработанное исключение регистрации событий приложений.Threadexceptionметод, например:
Application.ThreadException  = new
Threading.ThreadExceptionHandler(CatchFormsExceptions);
Обратите внимание на параметр реестра DbgJitDebugLaunchSetting под программного обеспечения реестра HKEY_LOCAL_MACHINE\.NetFramework. Это имеет одно из трех значений, о которых я знаю: 0: показывает диалоговое окно с просьбой "отладка" или "завершить". 1: позволяет исключения для CLR, чтобы заниматься. 2: запускает отладчик, указанный в разделе реестра DbgManagedDebugger. В Visual Studio, перейдите в меню Сервис → Параметры → отладка → Джит установить этот ключ 0 или 2. Но значение 1, Как правило, лучше на компьютере конечного пользователя. Обратите внимание, что этот ключ реестра действовал до среды CLR необработанное событие исключение. Это последнее событие-это ваш последний шанс войти необработанное исключение. Это срабатывает прежде, чем ваши блоки finally выполняется. Вы можете перехватить это событие следующим образом:
AppDomain.CurrentDomain.UnhandledException  = new
System.UnhandledExceptionEventHandler(CatchClrExceptions);
0 голосов
от
Это консольное приложение или приложение Windows? Если это .Чистая 1.1 консольное приложение это, к сожалению, дизайн-это подтвердил во вторник Дэв во втором посте блога, на которую вы ссылаетесь: Кстати, на моей машине 1.1 пример из MSDN не имеют ожидаемого результата; это просто, что вторая строка не появится, пока ты не присоединен отладчик (или нет). В v2 мы перевернули дело так, что событие unhandledexception пожаров до отладчик атташе, который, кажется, что большинство людей ожидают. Это звучит как .Объем 2.0 делает это лучше (слава Богу), но, честно говоря, я никогда не было времени вернуться и проверить.
0 голосов
от
Это окна формы приложения. Исключения, которые попадутся по применению.Threadexceptionметод работать нормально, и я не получить уродливые .Коробка чистый исключение (ОК, чтобы завершить, "отмена" для отладки? кто придумал это??). Я получаю некоторые исключения, которые не были пойманы, что и пошла на AppDomain.Событие unhandledexception, что вызывает проблемы. Я думаю, что я поймал большинство из этих исключений, и я их отображения в окне приятная ошибка сейчас. Так что я просто надеюсь, что там не какие-то другие обстоятельства, которые могут вызвать исключения, чтобы не быть пойманным приложения.Обработчик threadexceptionметод.
...