Ich habe eine kleine WinForms-App, die ein BackgroundWorker-Objekt verwendet, um einen lang laufenden Vorgang auszuführen.
Die Hintergrundoperation löst gelegentlich Ausnahmen aus, normalerweise wenn jemand eine Datei geöffnet hat, die neu erstellt wird.
Unabhängig davon, ob der Code von der IDE ausgeführt wird oder nicht. .NET öffnet ein Fehlerdialogfeld, in dem der Benutzer darüber informiert wird, dass eine nicht behandelte Ausnahme aufgetreten ist. Das Kompilieren des Codes mithilfe der Release-Konfiguration ändert dies ebenfalls nicht.
Laut MSDN :
Wenn die Operation eine Ausnahme auslöst, die Ihr Code nicht behandelt, fängt der BackgroundWorker die Ausnahme ab und übergibt sie an den RunWorkerCompleted-Ereignishandler, wo sie als Error-Eigenschaft von System.ComponentModel .. ::. RunWorkerCompletedEventArgs verfügbar gemacht wird. Wenn Sie unter dem Visual Studio-Debugger ausgeführt werden, wird der Debugger an der Stelle im DoWork-Ereignishandler unterbrochen, an der die nicht behandelte Ausnahme ausgelöst wurde.
Ich erwarte, dass diese Ausnahmen gelegentlich ausgelöst werden, und möchte sie eher im RunWorkerCompleted-Ereignis als in DoWork behandeln. Mein Code funktioniert ordnungsgemäß und der Fehler wird im RunWorkerCompleted-Ereignis korrekt behandelt, aber ich kann für mein ganzes Leben nicht herausfinden, wie ich das Auftreten des .NET-Fehlerdialogs verhindern kann, in dem über die "Nicht behandelte Ausnahme" geklagt wird.
Soll der BackgroundWorker diesen Fehler nicht automatisch abfangen? Ist das nicht das, was in der MSDN-Dokumentation steht? Was muss ich tun, um .NET darüber zu informieren, dass dieser Fehler behandelt wird , während die Ausnahme weiterhin in die Error-Eigenschaft von RunWorkerCompletedEventArgs übertragen werden kann?