Obsługa wyjątków BackgroundWorker

Pracuję z następującymi komponentami:

biblioteka (która zgłasza wyjątek)konsola testowa do testowania mojego logowaniabloki aplikacji obsługi wyjątków biblioteki korporacyjnejbloki aplikacji do rejestrowania biblioteki korporacyjnej

Wywoływam metodę biblioteczną przy użyciu programu działającego w tle. Biblioteka zgłasza wyjątek, ale program obsługi RunWorkerCompleted nigdy nie jest wywoływany.

Jedynym sposobem na złapanie wyjątku jest otoczenie mojego kodu obsługi DoWork blokiem try / catch.

Czy została błędnie zrozumiana właściwość RunWorkerCompletedEventArgs.Error? Czy nie chodzi o uzyskanie wyjątków, które zostały przechwycone przez BackgroundWorker?

Przykładowy kod:

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

Powyższy przykład prowadzi do zakończenia mojej aplikacji konsoli. Wyjście vs2010 nie zapisuje absolutnie nic (tylko wyjście domyślne).

Więc gdzie jest problem?

// Edytuj: ten fragment działa w celu przechwycenia wyjątku biblioteki.

<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