Creo que el meollo del asunto es entender que las excepciones que ocurren dentro de un hilo no se pasarán al hilo de llamada para su manejo.
Por ejemplo, supongamos que tiene un método rebelde:
private static void RebelWithoutACause()
{
throw new NullReferenceException("Can't touch this!");
}
Digamos que se crea un nuevo hilo que llama a este método en su programa, y ser un programador seguro, decide envolver el trabajo en una try/catch
bloque:
private static void Main(string[] args)
{
try
{
var thread = new Thread(RebelWithoutACause);
thread.Start();
thread.Join();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Sin embargo, si ejecuta este en el depurador, se entera de que no se consigue al bloque catch
, y en su lugar van a matar el hilo y el depurador se quejan de que se tener una excepción no controlada .
Debe elegir cómo manejar las excepciones, pero el manejo debe realizarse dentro de cada método de entrada de subprocesos. El manejo típico incluye registrar los detalles, notificar a los usuarios a través de la IU y cerrar su aplicación de la forma más elegante posible.
Nota usted debe * * Nunca volver a lanzar una excepción como se hace allí. Solo hacer 'throw;' en el bloque catch es suficiente ... – Joey
sé que puedo lanzar una excepción personalizada heredada de "System.Exception" con el mensaje – Hiyasat
Tienes que lanzar una * nueva * excepción con la información que deseas agregar. Pase la excepción * original * como InnerException. Haga esto solo si la información agregada es de gran valor ya que dificulta la solución de problemas. –