【问题标题】:Backgroundworker runworkercompleted not firingBackgroundworker runworker完成未触发
【发布时间】:2010-09-27 23:36:59
【问题描述】:

我对后台工作人员有一个非常奇怪的问题。代码太复杂所以会尝试解释问题只是想知道是否有人看到过类似的东西。 我们让 UI 线程从后台线程中分离出来 后台线程在后台对 pdf 打印机进行一些打印 完成后它就像线程函数退出一样死掉,所以我希望引发 runworkercompleted 事件

这是win forms .NET 2.0

因此,每次我们重新安装产品并启动我们的应用程序时,runworkercompleted 甚至都不会被解雇 如果我们从任务管理器中杀死我们的应用程序并重新开始它就像一个魅力一样工作(自然我们有点担心用户看到我们的产品的第一件事是挂起:-))

日志记录已确认在每种情况下 i) 后台工作线程函数确实干净地退出 ii) 在所述线程函数中没有引发异常

这是在两台机器上 100% 可重现的,一台是 win7 和一台 Vista Sp1。真的,我不明白第一次运行与它有什么关系

欢迎提出建议

【问题讨论】:

  • 因此,“如果我们从任务管理器中杀死我们的应用程序,runworkercompleted 甚至不会被解雇”。要么不要使用 TaskMan,要么在问题中添加一些标点符号。
  • 您可能没有给 BackgroundWorker 足够的时间来启动。
  • 我看到了完全相同的问题。第二次工作,但不是第一次?

标签: .net multithreading


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,记住它从第二次开始工作
    • 对不起,我在你的描述中漏掉了;你可以发布你的 BackgroundWorker 骨架的代码示例吗?断点也是直接在 RunWorkerCompleted 子的开头吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多