Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Backgroundworker线程在离开页面上显示错误消息_C#_Multithreading - Fatal编程技术网

C# Backgroundworker线程在离开页面上显示错误消息

C# Backgroundworker线程在离开页面上显示错误消息,c#,multithreading,C#,Multithreading,我目前正在VS2010 C#中开发一个向导。倒数第二页是带有进度条的进度页。正在进行的工作需要很长时间。因此,我创建了一个Backgroundworker线程,并在DowWork中执行冗长的操作。我使用ProgressChanged事件更新进度条。冗长流程的代码位于单独的actions类中。我从DoWork事件调用该类中的静态方法。在actions类中引发异常 一切正常。也就是说,DoWork事件成功地从my actions类调用了静态方法,ProgressChanged事件成功地更新了进度条,

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

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

但是,当我从“进度”页面移到“完成”页面时,会再次显示异常错误消息,而不会显示任何代码(即没有MessageBox.Show)

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

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

但是,如果将对action类的DoWork调用包含在try-catch块中,则不会显示错误消息。但是,RunWorkerCompleted事件不会捕获异常。此外,在DoWorker中放置一个try-catch-around呼叫不是推荐的方法。但有趣的是,这解决了问题


如果有人能对此有所了解,我将不胜感激。

从action类抛出的异常将在调用堆栈中冒泡,在本例中是到BackgroundOker的DoWork方法,然后再向上冒泡。由于您没有try/catch,这将导致异常冒泡出现,而VS调试器将向您显示它

  • 使用System.Diagnostics.DebuggerNonUserCodeAttribute()装饰DoWork处理程序

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

  • 在VisualStudio中,转到调试->异常并取消选中正在引发的异常


  • “…与MSDN示例相同”请给我们链接,以便更容易找到。请发布DowWork的代码(大纲)并确保已完成。如果格式不太正确,请道歉-我是新来的!指向MSDN示例的链接是:Hi DHN and Henk,只是想知道您是否有任何想法?我注意到我遗漏了“else if”(e.cancelled)“在RunWorkerCompleted中。由于我在backgroundworker线程中没有取消,我认为这无关紧要-但我只是以防万一-这没有什么区别。昨晚花了几个小时搜索web,但找不到任何关于这个特定问题的参考!因此,任何帮助都将非常感谢。不,Bgw抓住了来自DoWork的异常,并在完成的事件中显示它们。抱歉,我应该说清楚-这是在发布模式下发生的。在调试模式下,异常由调试器捕获,如MSDN示例中所述。