Meine WinForms App verwendet eine Anzahl von BackgroundWorker Objekte, um Informationen aus einer Datenbank abzurufen. Ich verwende BackgroundWorker, weil die Benutzeroberfläche während lang andauernder Datenbankabfragen nicht blockiert wird und das Threading-Modell für mich vereinfacht wird.Nicht behandelte Ausnahmen in BackgroundWorker
Ich bekomme gelegentlich DatabaseExceptions in einigen dieser Hintergrundthreads, und ich habe mindestens eine dieser Ausnahmen in einem Worker-Thread beim Debuggen erlebt. Ich bin ziemlich sicher, dass diese Ausnahmen Timeouts sind, von denen ich denke, dass sie von Zeit zu Zeit vernünftig sind.
Meine Frage ist, was passiert, wenn eine unbehandelte Ausnahme in einem dieser Hintergrund Worker-Threads auftritt.
Ich glaube nicht, dass ich eine Ausnahme in einem anderen Thread abfangen kann, aber kann ich erwarten, dass meine WorkerCompleted-Methode ausgeführt wird? Gibt es eine Eigenschaft oder Methode des BackgroundWorker, die ich nach Ausnahmen abfragen kann?
Das wird es tun. Natürlich können Sie die Ausnahme immer in Ihrer DoWork-Methode abfangen und entsprechend reagieren (denken Sie daran, Control.Invoke zu verwenden, wenn Sie die Benutzeroberfläche aktualisieren). Aber RunWorkerCompleted ist in der Tat einfacher. –
Ich finde diese Lösung. Mein RunWorkerCompleted wird nicht ausgeführt, wenn ich einfach New Exception(), aber Unhandled Exception ausgelöst habe. Fangen in DoWork ist nicht die richtige Antwort. In meinem BackgroundWorker sollte etwas nicht stimmen. – CallMeLaNN
Ich habe gerade die letzten sieben Stunden damit verbracht, herauszufinden, warum meine App nicht läuft und gerade beendet wird, und alles, weil in BackgroundWorker ein Fehler aufgetreten ist, der nicht richtig erkannt wurde. +1 an dich und ich denke du verdienst auch ein Bier :-) – EvilDr