Muy bien, este es uno fácil:
¿Cuál es la diferencia entre
Application.ThreadException
yAppDomain.CurrentDomain.UnhandledException
?¿Necesito manejar ambos?
¡Gracias!
fuente
Muy bien, este es uno fácil:
¿Cuál es la diferencia entre Application.ThreadException
y AppDomain.CurrentDomain.UnhandledException
?
¿Necesito manejar ambos?
¡Gracias!
Application.ThreadException es específico de Windows Forms. Winforms ejecuta controladores de eventos en respuesta a los mensajes que le envía Windows. El evento Click, por ejemplo, estoy seguro de que los conoce. Si tal controlador de eventos arroja una excepción, entonces hay una parada de retorno dentro del bucle de mensajes de Winforms que detecta esa excepción.
Ese respaldo activa el evento Application.ThreadException . Si no lo anula, el usuario obtendrá un ThreadExceptionDialog . Lo que le permite ignorar la excepción y seguir ejecutando su programa. No es una gran idea por cierto.
Puede deshabilitar este comportamiento llamando a Application.SetUnhandledExceptionMode () en el método Main () en Program.cs. Sin ese respaldo en su lugar, sucede lo habitual cuando un hilo muere debido a una excepción no controlada: AppDomain.UnhandledException se activa y el programa termina.
Fwiw: "ThreadException" fue una elección de nombre muy pobre. No tiene nada que ver con hilos.
Application.ThreadException
. Hice una pregunta para esto [aquí ] con mi pequeño código C #.De la fuente :
Application.ThreadException
puede ser capturado y la aplicación podría continuar (en general no es una gran idea, pero para la aplicación, como ejecutar periódicamente algunas acciones, esta es una buena solución).Para detectar las excepciones que se producen en subprocesos que no son creados ni propiedad de Windows Forms, utilice la extensión
AppDomain.UnhandledException
. Permite que la aplicación registre información sobre la excepción antes de que el controlador predeterminado del sistema informe la excepción al usuario y finalice la aplicación.El manejo de esta excepción no impide que se termine la aplicación.
Lo máximo que se puede hacer (los datos del programa pueden dañarse si no se manejan las excepciones) es guardar los datos del programa para su posterior recuperación. Después de eso, el dominio de la aplicación se descarga y la aplicación termina.
Para obtener más detalles, consulte MSDN .
fuente
De acuerdo, lo tenía frente a mí, este fragmento de código de msdn se explica por sí mismo:
fuente
Bueno, la cosa es que
ThreadException
ocurre debido a un problema con su hilo, elUnhandled Exception
se dispara si su código lanza una excepción que no se maneja.Una forma más fácil de provocar el segundo es crear una aplicación sin intentarlo ... atrapar bloques y lanzar una excepción.
Ahora bien, si necesita un seguro, puede manejar ambos, sin embargo, si captura y maneja
exceptions
correctamente, entonces no debería necesitar alUnhandledException
controlador, ya que es una especie de trampa para todos.fuente