【问题标题】:Background worker RunWorkerCompleted is never fired后台工作人员 RunWorkerCompleted 永远不会被解雇
【发布时间】:2014-06-05 01:53:01
【问题描述】:

使用以下代码,我的后台工作人员 RunWorkerCompleted 从未被调用,我不知道为什么。

void startWaitScan()
{
    backgroundWorker1.RunWorkerAsync();
}

void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // do something here
}

void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    Console.WriteLine("BackgroundWorker1_RunWorkerCompleted");
    if (!stopAsync)
    {
        backgroundWorker1.RunWorkerAsync();
    }
}

我的目标是让后台工作人员连续运行,我曾在 .NET 中工作,但是当我现在用 C# 重写代码时,我遇到了这个问题。

【问题讨论】:

  • 究竟是什么样的App?这仅适用于 WinForms 或 WPF。
  • C# Windows 窗体应用程序
  • 你是什么//Do something here?你确定它不是无限循环吗?在 DoWork 中设置断点并检查它是否真正退出。
  • 您的BackgroundWorker 是如何声明的?
  • 您是否正在注册处理程序以完成? backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);

标签: c# winforms backgroundworker


【解决方案1】:

你把所有的事件都正确连接了吗??

 backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
 backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
                                                 backgroundWorker1_RunWorkerCompleted);

【讨论】:

  • 你可以在构造函数中做到这一点。通常由表单设计者在 InitializeComponent() 方法中完成
  • 谢谢你,我知道这是愚蠢的,非常感谢帮助
  • 确实如此,我会在 5 分钟内选择这个答案为正确的,只要它允许我这样做。再次感谢
  • 这两行是否等同于java applet的action-listeners和executors?
  • Action Listener 在这种情况下是 backgroundWorker1_DoWork 和 backgroundWorker1_RunWorkerCompleted。 Java 执行器比较多capable than executors
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多