Backgroundworker线程在离开页面时显示错误消息

时间:2010-06-22 10:14:26

标签: c# multithreading

我目前正在开发VS2010 C#中的向导。倒数第二页是带有进度条的进度页面。正在进行的工作需要很长时间。所以我创建了一个Backgroundworker线程并在DoWork中执行冗长的操作。我使用ProgressChanged事件更新进度条。冗长进程的代码位于单独的操作类中。我从DoWork事件中调用该类中的静态方法。操作类中引发异常。

一切正常。也就是说,DoWork事件从我的actions类成功调用静态方法,ProgressChanged事件成功更新进度条,RunWorkerCompleted成功捕获异常。

但是,当我离开Progress页面到Finish页面时,再次显示异常错误消息 - 没有任何代码(即没有MessageBox.Show)。

我没有在此阶段包含任何代码,因为它与MSDN示例相同。

我知道它与单独的类中的工作代码无关,或者我称之为静态函数。我已将代码移动到Progress页面本身(如在MSDN示例中)并使用私有方法而不是静态,我仍然看到这个错误的消息。

但是,如果我将doWork调用封装在try-catch块中的action类中,则不会显示错误消息。但是,RunWorkerCompleted事件未捕获异常。此外,建议不要在DoWorker中调用try-catch。但有趣的是,这解决了这个问题!

如果有人能对此有所了解,我将非常感激吗?

1 个答案:

答案 0 :(得分:0)

从您的操作类抛出的异常将冒出调用堆栈,在本例中为BackgroundWoker的DoWork方法,然后向上。由于你没有try / catch,这将导致异常冒泡未被捕获,VS调试器会将其显示给你。

  1. 使用System.Diagnostics.DebuggerNonUserCodeAttribute()装饰您的DoWork处理程序。

  2. 在发布模式下运行程序,而不是调试

  3. 在Visual Studio中转到Debug - >异常并取消选中抛出的异常。