【发布时间】:2010-06-22 10:14:25
【问题描述】:
我目前正在用 VS2010 C# 开发向导。倒数第二页是带有进度条的进度页面。正在执行的工作需要很长时间。所以我创建了一个Backgroundworker线程并在DoWork中进行了冗长的操作。我使用 ProgressChanged 事件更新进度条。冗长过程的代码位于单独的操作类中。我从 DoWork 事件中调用该类中的静态方法。在操作类中引发异常。
一切正常。即DoWork事件成功调用了我的actions类中的静态方法,ProgressChanged事件成功更新了进度条,RunWorkerCompleted成功捕获了异常。
但是,当我从“进度”页面移到“完成”页面时,再次显示异常错误消息 - 我没有任何代码(即没有 MessageBox.Show)。
在这个阶段我没有包含我的任何代码,因为它与 MSDN 示例相同。
我知道这与工作代码位于单独的类中或我调用静态函数无关。我已将代码移动到进度页面本身(如 MSDN 示例中)并使用私有方法而不是静态方法,但我仍然看到此错误消息。
但是,如果我将对我的操作类的 DoWork 调用包含在 try-catch 块中,则不会显示错误消息。但是,RunWorkerCompleted 事件不会捕获异常。此外,不推荐在 DoWorker 中进行 try-catch 调用。但有趣的是这解决了问题!
如果有人能对此有所了解,我将不胜感激?
【问题讨论】:
-
"...和 MSDN 的例子一样" 请给我们链接,这样更容易找到。
-
并发布来自 DowWork 和 Completed 的代码(大纲),以确保。
-
抱歉,如果格式不正确 - 我是新来的!
-
MSDN 示例的链接是:msdn.microsoft.com/en-us/library/…
-
嗨 DHN 和 Henk, 只是想知道您是否有任何想法?我注意到我错过了 RunWorkerCompleted 中的“else if (e.cancelled)”。由于我在后台工作线程中没有取消,所以我认为这并不重要——但我尝试了以防万一——这并没有什么不同。昨晚花了几个小时在网上搜索,但找不到任何关于这个特定问题的参考!因此,我们将不胜感激任何帮助。
标签: c# multithreading