Cómo capturar cualquier error que se pueda producir en una aplicación desarrollada en C Sharp (C#) y no haya sido expresamente capturado. Este método será muy útil para evitar que aparezca la típica ventana de error no capturado en aplicación .Net, mostrando datos hasta del código fuente de la aplicación (como el nombre del método que ha producido el error). De esta forma podremos o bien mostrar un error personalizado o bien guardar el error en un fichero de log y no mostrarlo al usuario.

Cuando en alguna parte de nuestro código C# no hemos controlado una posible excepción (error), si se produce, se mostrará una ventana por defecto al usuario indicando el error. En muchas ocasiones esto es contraproducente, dado que mostramos al usuario una ventana «extraña» para él, con la que no sabe qué hacer, si continuar o si salir:

Además, si el usuario pulsa en «Detalles» puede obtener información que no debemos mostrar sobre nuestro código fuente, como por ejemplo el nombre del método y los parámetros que admite que produce el error:

Para capturar cualquier excepción no capturada en nuestra aplicación y así poder mostrar un mensaje personalizado al usuario (o realizar cualquier otra acción), abriremos el fichero de inicio de la aplicación, donde suele estar la clase Program:

En static void Main(), al principio:

Añadiremos las siguientes líneas:

En la clase internal static class Program, definiremos los métodos que llamamos si se produce un error no capturado Tarea_Error_No_Interfaz y Tarea_Error_Interfaz, quedando:

En el ejemplo anterior, al producirse un error que no hemos capturado expresamente en nuestra aplicación C#, escribimos el error en un fichero y también lo mostramos al usuario, pero con mensaje personalizado. Para crear esta clase de log, añadiremos una nueva clase a nuestra app C#, con el nombre Log.cs:

Y le agregaremos el siguiente contenido:

El código C# completo de ejemplo del fichero Program.cs que contiene la clase principal de la aplicación Program:

Si ahora volvemos a ejecutar el botón que produce un error no capturado, nos devolverá este mensaje personalizado:

Además de haber guardado el error en un fichero de log, para depuración por parte de los desarrolladores: