.net Backgroundworker Runworker已完成未启动

.net Backgroundworker Runworker已完成未启动,.net,multithreading,.net,Multithreading,我对背景工作人员有一个很奇怪的问题。代码太复杂了,所以我会尝试解释问题,只是想知道是否有人见过类似的东西。 我们的UI线程与后台线程分离 后台线程在后台对pdf打印机进行一些打印 当完成时,它就像线程函数中的一样消失,因此我希望引发runworkercompleted事件 这是WinForms.NET2.0 因此,每次我们重新安装产品并启动应用程序时,runworkercompleted甚至都不会被解雇 如果我们从task manager中删除我们的应用程序并重新开始,它就会像一个符咒一样工作(

我对背景工作人员有一个很奇怪的问题。代码太复杂了,所以我会尝试解释问题,只是想知道是否有人见过类似的东西。 我们的UI线程与后台线程分离 后台线程在后台对pdf打印机进行一些打印 当完成时,它就像线程函数中的一样消失,因此我希望引发runworkercompleted事件

这是WinForms.NET2.0

因此,每次我们重新安装产品并启动应用程序时,runworkercompleted甚至都不会被解雇 如果我们从task manager中删除我们的应用程序并重新开始,它就会像一个符咒一样工作(当然,我们有点担心用户看到我们产品的第一件事就是挂起:-)

日志记录已经证实,在所有情况下 i) 后台工作线程函数不会干净地退出 ii)上述线程函数中未提出任何异常

这在两台机器上是100%可谴责的,一台是win7,另一台是Vista Sp1。真的,我不明白第一次跑步跟它有什么关系


欢迎任何建议

RunWorkerCompleted事件是否实际注册到BackgroundWorkers事件处理程序


这看起来几乎是一个健全的检查,但这可以解释为什么BackgroundWorker干净地退出,而RunWorkerCompleted没有被触发。

当我意识到我在处理BackgroundWorker对象并在异步执行完成之前过早地分离事件处理程序时,我遇到了这个问题。查看您的代码,确保您的BackgroundWorker周围没有using块,也没有专门调用dispose或断开事件处理程序的连接。

是的,请记住它从第二次开始工作。抱歉,我在您的描述中没有提到这一点;您可以发布BackgroundWorker骨架的代码示例吗?断点是否也直接位于RunWorkerCompleted子的开始处?因此,“如果我们从任务管理器中关闭应用程序,RunWorkerCompleted甚至不会被解雇”。要么不要使用TaskMan,要么在问题中添加标点符号。你可能没有给BackgroundWorker足够的时间开始。我看到了完全相同的问题。第二次工作,但不是第一次?