ich mit den folgenden Komponenten gerade arbeitete:Backgroundausnahmebehandlung
- eine Bibliothek (die eine Ausnahme auslöst)
- eine Test-Konsole meiner Protokollierung
- die Enterprise Library Ausnahmebehandlung Applikationsbausteine zu testen
- die Enterprise Library Logging-Applikationsbausteine
ich Aufrufen der Bibliothek Methode unter Verwendung von ein Hintergrundarbeiter. Die Bibliothek löst die Ausnahme aus, aber der RunWorkerCompleted-Handler wird nie aufgerufen.
Die einzige Möglichkeit, die Ausnahme zu fangen, besteht darin, meinen DoWork-Handler-Code mit einem try/catch-Block zu umgeben.
Hat die RunWorkerCompletedEventArgs.Error-Eigenschaft missverstanden? Nicht um Ausnahmen zu bekommen, die vom BackgroundWorker abgefangen wurden?
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");
}
Das obige Beispiel führt zu einer Beendigung meiner Konsolenanwendung. Die vs2010-Ausgabe schreibt absolut nichts (nur Standardausgabe).
Also, wo ist das Problem?
// Bearbeiten: Dieser Ausschnitt dient zum Abfangen der Ausnahme der Bibliothek.
static void w_DoWork(object sender, DoWorkEventArgs e)
{
try
{
MyClass m = new MyClass();
w.result = m.Compute();
}catch(Exception e){ }
}
Haben Sie etwas im Hauptthread, das verhindert, dass es endet? So etwas wie eine Weile (wahr)? – dcarneiro
Sind Sie 100% sicher, dass RunWorkerCompleted nie aufgerufen wird? Hier ist eine SO-Frage, die beweist, dass dies funktionieren sollte ... http: //stackoverflow.com/questions/1044460/unhandled-exceptions-in-backgroundworker –
Kannst du nicht debuggen und sehen, was passiert? Was gibt HandleException() zurück? – Reniuz