Как уже сказал Хенк Холтерман, вы должны обрабатывать исключения. Только те грязные, которые не обработаны, должны быть оставлены для Application.ThreadException. Если вы этого не знаете, хотя вы сможете отобразить свое сообщение в методе обработки событий Application.ThreadException
, приложение затем прекратит работу . Определенные исключения не фиксируются Application.ThreadException
, и вам придется обрабатывать событие AppDomain.UnhandledException
.
AFAIK Лучше не бросать исключения в обработчики Async (гуру, поправьте меня, если я ошибаюсь). Лучший способ справиться с ними - это генерировать исключения, когда пользователь вызывает end end, или когда пользователь пытается получить объекты ответа. Обратите внимание, если вы throw exc
объект из одного потока, он не будет пойман в другом потоке. Таким образом, информировать основной поток одним из способов было бы вызвать событие (к которому подключен основной поток), в котором вы передаете объект ответа. Если произошла ошибка, вызовите исключение в получателе объекта ответа, иначе верните объект ответа. Другой способ - просто вызвать событие, которое сообщит основному потоку об исключении.
EDIT:
Только что увидел ваш комментарий:
мы можем поймать исключение и перенаправить
страница на страницу ошибок в asp.net
установка данных об ошибках в web.config.
как сделать в winform?
Нет прямого способа сделать это в winforms. У меня есть один метод HandleError на каждый поток. Этот метод будет принимать объект исключения в качестве параметра и проверять тип исключения, отображать окно сообщения и / или регистрировать его.