BackgroundWorker-Ausnahmebehandlung

Ich arbeite mit folgenden Komponenten:

eine Bibliothek (die eine Ausnahme auslöst)eine Testkonsole zum Testen meiner Protokollierungdie Ausnahmebehandlung der Unternehmensbibliothek für AnwendungsblöckeDie Protokollierungsanwendung der Unternehmensbibliothek blockiert

Ich rufe die Bibliotheksmethode mithilfe eines Backgroundworkers auf. Die Bibliothek löst die Ausnahme aus, der RunWorkerCompleted-Handler wird jedoch nie aufgerufen.

Die einzige Möglichkeit, die Ausnahme abzufangen, besteht darin, meinen DoWork-Handler-Code mit einem Try / Catch-Block zu umgeben.

Haben Sie die RunWorkerCompletedEventArgs.Error-Eigenschaft falsch verstanden? Ist es nicht so, dass der BackgroundWorker Ausnahmen abfängt?

Codebeispiel:

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

Das obige Beispiel führt zur Beendigung meiner Konsolenanwendung. Die Ausgabe von vs2010 schreibt absolut nichts (nur die Standardausgabe).

Wo liegt also das Problem?

// Edit: Dieses Snippet fängt die Ausnahme der Bibliothek ab.

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

}
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage