.NET Backgroundworker - 有没有办法让异常正常传回主线程?

Gre*_*reg 6 .net backgroundworker winforms

问题:重新使用.NET Backgroundworker,是不是有办法让异常正常传回主线程?

背景:

  • 目前在我的WinForms应用程序中,我有一般的异常句柄,如果(a)自定义应用程序异常然后呈现给用户,但不退出程序,以及(b)如果出现其他异常然后退出应用程序
  • 以上是很好的,因为我可以在应用程序的任何地方抛出适当的异常,并且一般地处理表示/处理

Aar*_*ght 6

BackgroundWorker自动传回例外.挂钩事件时,它位于AsyncCompletedEventArgs.Error属性中RunWorkerCompleted.

如果您愿意,可以在此事件处理程序中包装并重新抛出异常 - 请记住,框架中存在一个错误,导致"外部"异常被抛出,因为您处于中间位置Invoke.

在.NET应用程序中的后台线程上发生的异常是一个灾难性的错误,它可以并且将导致整个过程失败; 处理此问题的唯一方法是将所有活动包装在try-catch块中并保存发生的任何异常,这正是它BackgroundWorker所做的.