【发布时间】:2011-07-13 09:25:52
【问题描述】:
我不是在我的 Windows 窗体中创建后台工作程序,而是在实现所有处理的类文件 (BusinessLogic) 中。在主窗体中,我首先调用初始化 BGW 的 BL 方法。然后我调用 BL 的方法来启动 BGW。
这里有更多关于我的实现的背景:)。 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;
}
【问题讨论】:
-
(有点跑题了)我不得不假设这不是你要上线的代码,但以防万一,你为什么要找一个新的 BG线程来完成工作,然后在调用线程上调用 Thread.Sleep()?为什么不同步地完成工作?
-
嗯,是的,我刚刚发现了这一点。 :) 我在我的应用程序中跨多个表单执行此操作(调用 BGW),并默认在主表单中实现它。但是主窗体不需要 BGW,因为我希望应用程序仅在处理完成后打开。
标签: c# .net backgroundworker