gpt4 book ai didi

c# - BackgroundWorker 不会触发 RunWorkerCompleted 事件

转载 作者:太空狗 更新时间:2023-10-29 20:28:45 30 4
gpt4 key购买 nike

我不是在我的窗口窗体中而是在实现所有处理的类文件 (BusinessLogic) 中创建 backgroundworker。在主窗体中,我首先调用初始化 BGW 的 BL 方法。然后我调用将启动 BGW 的 BL 方法。

这里是关于我的实现的更多背景信息 :)。 How to use BackGroundWorker in class file?

DoWork 事件运行良好,但未调用 RunWorkerCompleted。

一些谷歌搜索,我发现了这个链接。我觉得我的问题和这些人一样。 http://www.eggheadcafe.com/software/aspnet/29191764/backgroundworker-does-not-fire-the-runworkercompleted-event.aspx

如果您对此问题有任何意见,我将不胜感激。提前致谢。

主窗体中的代码:

    private void frmMain_Load(object sender, EventArgs e)
{
Hide();
BusinessLogic.BGWInitialize();
BusinessLogic.StartBackgroundWorker();
while (!BusinessLogic.firstCycleDone)
{
Thread.Sleep(100);
}
Show();
}

BusinessLogic 中的代码:

    public static void BGWInitialize()
{
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChanged);
bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
bgWorker.WorkerReportsProgress = true;
}

public static void StartBackgroundWorker()
{
bgWorker.RunWorkerAsync();
}


private static void bgWorker_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
firstCycleDone = true;

}

最佳答案

完成的事件被调用到主线程。它应该由 MessagePump 拾取并执行。

但是,您的 Wait-and-Sleep 代码阻塞了消息循环。

  Hide();
....
while (!BusinessLogic.firstCycleDone)
{
Thread.Sleep(100);
}
Show();

这里的答案是您没有用到 Backgroundworker 或其他形式的线程...

直接调用bgWorker_DoWork()即可:

 // Hide();
bgWorker_DoWork(); // rename
Show();

关于c# - BackgroundWorker 不会触发 RunWorkerCompleted 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676790/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com