Manipulação de Exceções do BackgroundWorker

Eu estou trabalhando com os seguintes componentes:

uma biblioteca (que lança uma exceção)um console de teste para testar meu registroa exceção da biblioteca corporativa manipulando blocos de aplicativosos blocos de aplicativos de log da biblioteca corporativa

Eu estou invocando o método de biblioteca usando um backgroundworker. A biblioteca lança a exceção, mas o manipulador RunWorkerCompleted nunca é chamado.

A única maneira de capturar a exceção é cercar o código do manipulador DoWork com um bloco try / catch.

Não entendeu mal a propriedade RunWorkerCompletedEventArgs.Error? Não é para obter exceções que foi pego pelo BackgroundWorker?

Cotasmo:

<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>

O exemplo acima leva a uma finalização do meu aplicativo de console. A saída vs2010 grava absolutamente nada (apenas saída padrão).

Então, onde está o problema?

// Edit: este trecho funciona para capturar a exceção da biblioteca.

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

}
</code>

questionAnswers(1)

yourAnswerToTheQuestion