我創建的backgroundworker不是在我的Windows窗體中,而是在實現所有處理的類文件(BusinessLogic)中。從主窗體我首先調用初始化BGW的BL方法。然後我打電話給啓動BGW的BL的方法。BackgroundWorker不會觸發RunWorkerCompleted事件
這裏是更多的背景:)在我的實施。 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()?爲什麼不只是同步工作? – ZombieSheep
嗯,是的,我剛剛發現。 :)我在我的應用程序中通過多個表單執行此操作(稱爲BGW),並默認在主窗體中實現它。然而,主表格不需要BGW,因爲我希望應用程序只在處理完成後才能打開。 – Arcturus