我的WinForms应用程序使用许多BackgroundWorker对象从数据库中检索信息.我正在使用BackgroundWorker,因为它允许UI在长时间运行的数据库查询期间保持解除阻塞状态,并简化了我的线程模型.
我在其中一些后台线程中偶尔会遇到DatabaseExceptions,并且在调试时我在工作线程中至少目睹了其中一个异常.我相当有信心这些例外是超时,我认为它不时是合理的.
我的问题是当在其中一个后台工作线程中发生未处理的异常时会发生什么.
我不认为我可以在另一个线程中捕获异常,但我可以期望我的WorkerCompleted方法被执行吗?我是否可以查询异常的BackgroundWorker的任何属性或方法?
我有一个小型的WinForms应用程序,它利用BackgroundWorker对象来执行长时间运行的操作.
后台操作会抛出偶然的异常,通常是当有人打开正在重新创建的文件时.
无论代码是否从IDE运行,.NET都会弹出一个错误对话框,通知用户发生了未处理的异常.使用Release配置编译代码也不会改变它.
根据MSDN:
如果操作引发了代码无法处理的异常,则BackgroundWorker会捕获异常并将其传递到RunWorkerCompleted事件处理程序,在该处理程序中,它作为System.ComponentModel .. ::.RunWorkerCompletedEventArgs的Error属性公开.如果您在Visual Studio调试器下运行,则调试器将在DoWork事件处理程序中引发未处理的异常的位置中断.
我希望有时抛出这些异常,并希望在RunWorkerCompleted事件而不是DoWork中处理它们.我的代码正常工作,并且在RunWorkerCompleted事件中正确处理错误,但我不能在我的生活中弄清楚如何停止.NET错误对话框抱怨发生"未处理的异常".
是不是BackgroundWorker应该自动捕获该错误?这不是MSDN文档中的内容吗?什么我需要做的通知.NET,这个错误是被处理,同时仍允许例外propage到RunWorkerCompletedEventArgs的错误属性?