Manejo de excepciones de BackgroundWorker

Estoy trabajando con los siguientes componentes:

una biblioteca (que lanza una excepción)Una consola de prueba para probar mi registro.la aplicación de gestión de excepciones de la biblioteca empresarial bloquealos bloques de aplicación de registro de la biblioteca empresarial

Estoy invocando el método de la biblioteca usando un backgroundworker. La biblioteca lanza la excepción pero nunca se llama al controlador RunWorkerCompleted.

La única forma de capturar la excepción es rodear el código de mi controlador DoWork con un bloque try / catch.

¿Se malinterpreta la propiedad RunWorkerCompletedEventArgs.Error? ¿No es para obtener excepciones que fueron atrapadas por BackgroundWorker?

Codesample:

<code>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");
}
</code>

El ejemplo anterior conduce a una terminación de mi aplicación de consola. La salida vs2010 no escribe absolutamente nada (solo salida predeterminada).

Entonces, ¿dónde está el problema?

// Editar: este fragmento de código funciona para capturar la excepción de la biblioteca.

<code>static void w_DoWork(object sender, DoWorkEventArgs e)
{
   try
   {
      MyClass m  = new MyClass();
      w.result = m.Compute();
   }catch(Exception e){ }

}
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta