Сведения о вопросе

1234123213

16:03, 1st July, 2020

Теги

Необработанный обработчик исключений в .NET 1.1

Просмотров: 543   Ответов: 2

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

Я добавил обработчики к Application.ThreadException и AppDomain.CurrentDomain.UnhandledException, которые действительно вызываются. Моя проблема заключается в том, что стандартный диалог ошибки CLR все еще отображается (до вызова обработчика исключений).

Джефф рассказывает об этой проблеме в своем блоге здесь и здесь . Но нет никакого решения. Итак, каков стандартный способ в .NET 1.1 обрабатывать необнаруженные исключения и отображать дружественное диалоговое окно?

Ответ Джеффа был отмечен как правильный ответ, потому что ссылка, которую он предоставил, содержит самую полную информацию о том, как сделать то, что требуется.



  Сведения об ответе

DINO

18:03, 1st July, 2020

О, в формах Windows вы определенно должны быть в состоянии заставить его работать. Единственное, что вы должны остерегаться, это то, что происходит в разных потоках.

У меня есть старая статья проекта кода здесь, которая должна помочь:

Удобная Для Пользователя Обработка Исключений


  Сведения об ответе

COOL

18:03, 1st July, 2020

AppDomain.UnhandledException -это событие, а не глобальный обработчик исключений. Это означает, что к тому времени, когда он будет поднят, ваше приложение уже находится на пути вниз по течению, и вы ничего не можете с этим поделать, кроме выполнения очистки и ведения журнала ошибок.

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

Для такого рода ошибок не существует однозначного решения. Вам нужно поместить реальный обработчик исключений (блок catch) выше всех мест, где происходит эта ошибка, и переслать его (например) глобальному методу/классу обработчика, который определит, безопасно ли просто сообщать и продолжать, основываясь на типе исключения и/или содержимом.

Edit: можно отключить (=hack) механизм сообщения об ошибках, встроенный в Windows, чтобы обязательное диалоговое окно "crash and burn" не отображалось, когда ваше приложение выходит из строя. Однако это становится эффективным для всех приложений в системе, а не только для вашего собственного.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться