2008-08-05 11 views
33

Al trabajar en proyectos ASP.NET 1.1 siempre utilicé Global.asax para detectar todos los errores. Estoy buscando una forma similar de detectar todas las excepciones en un control de usuario de Windows Forms, que termina siendo un control alojado de IE. ¿Cuál es la forma correcta de hacer algo como esto?Gestión global de excepciones para el control de formas

+0

También eche un vistazo a [mi pregunta] (http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11) para algunas de las trampas (enlaces a un par de codificar las entradas de blog de terror). – Ray

Respuesta

6

Si está utilizando VB.NET, puede acceder al muy conveniente ApplicationEvents.vb. Este archivo viene de forma gratuita con un proyecto VB.NET WinForms y contiene un método para manejar unhandled exceptions.

para llegar a este archivo ingenioso, es "Propiedades del proyecto de aplicación >> >> eventos de aplicación"

Si no se está usando VB.NET, entonces sí, es el manejo de Application.ThreadException.

11

Actualmente en mi aplicación WinForms tengo controladores para Application.ThreadException, como anteriormente, sino también AppDomain.CurrentDomain.UnhandledException

mayoría de las excepciones llegan a través del manejador ThreadException, pero el dominio de aplicación también ha cogido unos cuantos en mi experiencia

+3

Código de ejemplo de MSDN que muestra cómo detectar ambos tipos de excepciones no controladas: [msdn] (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx) –

2

Código de MSDN: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Sub Main() 
    Dim currentDomain As AppDomain = AppDomain.CurrentDomain 
    AddHandler currentDomain.UnhandledException, AddressOf MyHandler 

    Try 
    Throw New Exception("1") 
    Catch e As Exception 
    Console.WriteLine("Catch clause caught : " + e.Message) 
    Console.WriteLine() 
    End Try 

    Throw New Exception("2") 
End Sub 

Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs) 
    Dim e As Exception = DirectCast(args.ExceptionObject, Exception) 
    Console.WriteLine("MyHandler caught : " + e.Message) 
    Console.WriteLine("Runtime terminating: {0}", args.IsTerminating) 
End Sub 
3

para manejar excepciones a nivel mundial ...

de aplicaciones de Windows

caso System.Windows.Forms.Application.ThreadException

Generalmente se usa en el método principal. Consulte MSDN Thread Exception

Asp.Net

caso System.Web.HttpApplication.Error

que normalmente se utiliza en el archivo Global.asax. Consulte MSDN Global.asax Global Handlers

aplicación de consola

evento System.AppDomain.UnhandledException

Generalmente se usa en el método principal. Consulte MSDN UnhandledException

Cuestiones relacionadas