Normalmente utilizo algo así para tratar de detectar todas las excepciones de alto nivel inesperadas.
using System;
static class Program
{
[STAThread]
static void Main(string[] argv)
{
try
{
AppDomain.CurrentDomain.UnhandledException += (sender,e)
=> FatalExceptionObject(e.ExceptionObject);
Application.ThreadException += (sender,e)
=> FatalExceptionHandler.Handle(e.Exception);
// whatever you need/want here
Application.Run(new MainWindow());
}
catch (Exception huh)
{
FatalExceptionHandler.Handle(huh);
}
}
static void FatalExceptionObject(object exceptionObject) {
var huh = exceptionObject as Exception;
if (huh == null) {
huh = new NotSupportedException(
"Unhandled exception doesn't derive from System.Exception: "
+ exceptionObject.ToString()
);
}
FatalExceptionHandler.Handle(huh);
}
}
¿Es posible que también encuentre algo útil? Este código principal enruta las tres formas de atrapar excepciones inesperadas de alto nivel a través de una llamada a un método. Todo lo que necesita ahora es una clase estática FatalExceptionHandler
que incluye el manejo de excepciones de nivel superior en su método Handle
.
Y en realidad, cualquier desarrollador de aplicaciones sabe en realidad hay sólo dos cosas que hacer allí:
- Mostrar/log excepción como mejor le parezca
- Asegúrese de que el proceso de salida/matar a la aplicación
Si cree que el elemento dos es extraño, recuerde que solo nos molestamos en hacer esto en primer lugar para situaciones realmente excepcionales. Estas cosas probablemente son errores que necesitan cambios en su aplicación para ser tratados con precisión. Cualquier otro manejo de excepciones, el tipo funcional, debe estar más abajo dentro de su código de programa real, captando tipos específicos de excepciones donde esto tenga sentido y manipularlas allí de la manera que tenga sentido. Todo lo demás debe tener burbujas hasta su FatalExceptionHandler
a darse a conocer y detener el programa, posiblemente, lisiado de trabajo de un estado corrupto
programas muertos no cuentan mentiras ... ;-)
bueno, sí, por supuesto que lo sé;) – agnieszka
¿por qué no cogerlos en Main()? –
"sé que" fue una respuesta a la parte "sumidero de errores". me enseñaron try-catch en main es algo que no debes hacer. sin embargo, debo decir honestamente que no sé por qué sería un mal enfoque (por supuesto si atrapo todas las excepciones que puedo pensar dentro del código) – agnieszka