Arc*_*rus 7 .net c# backgroundworker
我正在创建不在我的Windows窗体中的后台工作程序,而是在实现所有处理的类文件(BusinessLogic)中.从主窗体我首先调用初始化BGW的BL方法.然后我调用BL的方法来启动BGW.
这是我的实现更多背景:). 如何在类文件中使用BackGroundWorker?
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();
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
已完成的事件被调用到主线程.它应该被MessagePump拾取并执行.
但是,您的等待和睡眠代码阻止了消息循环.
Hide();
....
while (!BusinessLogic.firstCycleDone)
{
Thread.Sleep(100);
}
Show();
Run Code Online (Sandbox Code Playgroud)
这里的答案是你没有使用Backgroundworker或其他形式的线程......
bgWorker_DoWork()直接打电话:
// Hide();
bgWorker_DoWork(); // rename
Show();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10770 次 |
| 最近记录: |