estoy trabajando con los siguientes componentes:BackgroundWorker manejo de excepciones
- una biblioteca (que se produce una excepción)
- una prueba de consola para probar mi registro
- la biblioteca de la empresa bloques de aplicación de manejo de excepciones
- los bloques de aplicación de la biblioteca de registro de la empresa
estoy invocando el método de biblioteca mediante el uso de un trabajador de fondo. La biblioteca arroja la excepción pero nunca se llama al controlador RunWorkerCompleted.
La única forma de detectar la excepción es rodear mi código de controlador DoWork con un bloque try/catch.
¿No entiende bien la propiedad RunWorkerCompletedEventArgs.Error? ¿No es para obtener excepciones que fueron atrapadas por el BackgroundWorker?
codeSample:
static BackgroundWorker w = new BackgroundWorker();
w.DoWork += new DoWorkEventHandler(w_DoWork);
w.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
w.RunWorkerAsync();
static void w_DoWork(object sender, DoWorkEventArgs e)
{
MyClass m = new MyClass();
w.result = m.Compute();
}
static void w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
HandleException(e.Error);
}
/* result related code */
}
static void HandleException(Exception e)
{
ExceptionPolicy.HandleException(e, "MyPolicy");
}
La muestra anterior conduce a una terminación de mi aplicación de consola. La salida del vs2010 no escribe absolutamente nada (solo salida predeterminada).
Entonces, ¿dónde está el problema?
// Editar: este fragmento funciona para detectar la excepción de la biblioteca.
static void w_DoWork(object sender, DoWorkEventArgs e)
{
try
{
MyClass m = new MyClass();
w.result = m.Compute();
}catch(Exception e){ }
}
¿Tiene algo en el hilo principal que impida que termine? Algo así como un tiempo (verdad)? – dcarneiro
¿Estás 100% seguro de que RunTorkerCompleted nunca se llama? Aquí hay una pregunta de SO que demuestra que esto debería funcionar ... http: //stackoverflow.com/questions/1044460/unhandled-exceptions-in-backgroundworker –
¿No puedes depurar y ver qué pasa? ¿Qué devuelve HandleException()? – Reniuz