É try / catch em torno de todo o programa C # possível?
-
05-07-2019 - |
Pergunta
Um programa C # é invocado por:
Application.Run (new formClass ());
Eu gostaria de colocar um try / catch em torno de toda a coisa para prender qualquer exceções.Ele. Quando eu colocá-lo em torno deste método Run, exceções não são capturados; controlar apenas retorna aqui quando o termina programa depois de uma exceção não capturada.
Onde posso colocar try / catch para cobrir todo o programa? Obrigado!
Solução
Para capturar exceções não tratadas hook-up do Windows Form o
AppDomain.UnhandledException
e eventos Application.ThreadException
.
De interesse: erros inesperados em aplicativos gerenciados
Outras dicas
Basicamente, você não pode capturar todas as exceções quando se utiliza o processo de CLR padrão de hospedagem. Período. Isso ocorre porque o AppDomain.UnhandledException
evento é apenas uma notificação , não é possível tratar a exceção (o que significa que não é possível impedir que a aplicação seja terminada após o processamento da notificação).
No entanto, você pode pegar e tratar todas as exceções no segmento interface do usuário de um aplicativo WinForms usando a sua Application.ThreadException
manipulador (e controlar o comportamento via UnhandledExceptionMode
). Outros tópicos que lançam uma exceção não vai ser pego por esse manipulador.
Em geral, não é uma boa idéia para tentar lidar com todas as exceções. Você pode, no entanto, usar o
AppDomain.UnhandledException
para registrar o erro e / ou executar tarefas importantes de limpeza (por exemplo, desligar um databaseor baseado em arquivo o que for).