Como Sean ha dicho, lo que tiene que hacer todo el manejo de excepciones y la limpieza en el interior del método de hilo, no se puede hacer en la inicialización del hilo. Por ejemplo:
public void Run()
{
try
{
Thread thread1 = new Thread(ThreadEntry1);
thread1.Start();
Thread thread2 = new Thread(ThreadEntry2);
thread2.Start();
}
catch (NotImplementedException)
{
// Neither are caught here
Console.WriteLine("Caught you");
}
}
private void ThreadEntry1()
{
throw new NotImplementedException("Oops");
}
private void ThreadEntry2()
{
throw new NotImplementedException("Oops2");
}
En cambio, este enfoque es más autónomo y, obviamente, también funciona:
public void Run()
{
Thread thread1 = new Thread(ThreadEntry1);
thread1.Start();
}
private void ThreadEntry1()
{
try
{
throw new NotImplementedException("Oops");
}
catch (NotImplementedException)
{
Console.WriteLine("Ha! Caught you");
}
}
Si usted quiere saber si el hilo ha fallado, entonces usted debería considerar una serie de WaitHandles y devuelve la señal a tu método de llamada. Un enfoque alternativo y más sencillo es simplemente incrementar un contador cada vez que la operación de un subproceso termina:
Interlocked.Increment(ref _mycounter);
De acuerdo. No veo eso como un problema: comienzas un hilo, entra en un método tuyo ... entonces, ¿qué es lo que te impide manejar excepciones allí? – TomTom