Exceção não tratada em C#

Quando se trabalha com serviços Windows e componentes COM+, podem ocorrer falhas nestas aplicações que fazem o processo host morrer. Normalmente são exceções não tratadas (sem catch) que ocorrem, e por este motivo, o .NET mata a aplicação para evitar que a aplicação fique num estado inconsistente.

Normalmente nestes casos, o EventViewer do Windows contém mais informações sobre a falha, mas é possível dentro do código ter acesso a Exceção para maiores detalhes, e para que a falha seja logada. Para isso, basta assinar o evento UnhandledException do AppDomain atual.

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = e.ExceptionObject as Exception;

    if (ex != null)
    {
        Logger.Write(string.Format("An unhandled exception occurred and will terminate the application: {0} - Stack: {1}",
             ex.Message, ex.StackTrace), "Exception", 0, 0, TraceEventType.Critical, "CurrentDomain_UnhandledException");

        if (ex.InnerException != null)
        {
            Logger.Write(string.Format("An unhandled exception occurred and will terminate the application (Inner): {0} - Stack: {1}",
                 ex.InnerException.Message, ex.InnerException.StackTrace), "Exception", 0, 0, TraceEventType.Critical, "CurrentDomain_UnhandledException");
         }
    }
}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s