Tudo bem, esta é fácil:
Qual é a diferença entre
Application.ThreadException
eAppDomain.CurrentDomain.UnhandledException
?Eu preciso lidar com ambos?
Obrigado!
fonte
Tudo bem, esta é fácil:
Qual é a diferença entre Application.ThreadException
e AppDomain.CurrentDomain.UnhandledException
?
Eu preciso lidar com ambos?
Obrigado!
Application.ThreadException é específico para Windows Forms. Winforms executa manipuladores de eventos em resposta a mensagens enviadas a ele pelo Windows. O evento Click, por exemplo, tenho certeza que você os conhece. Se tal manipulador de eventos lançar uma exceção, então há um back-stop dentro do loop de mensagem do WinForms que captura essa exceção.
Esse backstop dispara o evento Application.ThreadException . Se você não substituí-lo, o usuário obterá um ThreadExceptionDialog . O que permite que ele ignore a exceção e continue executando seu programa. Não é uma boa ideia aliás.
Você pode desativar esse comportamento chamando Application.SetUnhandledExceptionMode () no método Main () em Program.cs. Sem esse backstop no lugar, o normal acontece quando um thread morre de uma exceção não tratada: AppDomain.UnhandledException é acionado e o programa termina.
Fwiw: "ThreadException" foi uma escolha de nome muito ruim. Não tem nada a ver com tópicos.
Application.ThreadException
. Eu levantei uma questão para isso [aqui ] com meu pequeno código C #.Da fonte :
Application.ThreadException
pode ser capturado e o aplicativo pode continuar (em geral não é uma boa ideia, mas para o aplicativo, como executar algumas ações periodicamente, essa é uma boa solução).Para capturar exceções que ocorrem em threads não criados e pertencentes a Windows Forms, use o
AppDomain.UnhandledException
. Ele permite que o aplicativo registre informações sobre a exceção antes que o manipulador padrão do sistema relate a exceção ao usuário e encerre o aplicativo.O tratamento dessa exceção não impede que o aplicativo seja encerrado.
O máximo que pode ser feito (os dados do programa podem ser corrompidos quando as exceções não são tratadas) é salvar os dados do programa para recuperação posterior. Depois disso, o domínio do aplicativo é descarregado e o aplicativo é encerrado.
Para obter mais detalhes, consulte MSDN .
fonte
OK - eu tinha na minha frente, este pedaço de código do msdn é bastante autoexplicativo:
fonte
Bem, o fato é que,
ThreadException
ocorre devido a um problema com o seu segmento, oUnhandled Exception
é disparado se o código lançar uma exceção que não é tratada.A maneira mais fácil de causar o segundo é criar um aplicativo sem tentar ... capturar blocos e lançar uma exceção.
Agora, se você precisa de seguro, pode lidar com os dois; no entanto, se você capturar e manipular o seu
exceptions
corretamente, não precisará doUnhandledException
manipulador, pois é quase como um pega-tudo.fonte