Я создаю фонового рабочего не в своей форме Windows, а в файле класса (BusinessLogic), который реализует всю обработку. Из основной формы я сначала вызываю метод BL, который инициализирует BGW. Затем я вызываю метод BL, который запускает BGW.
Вот еще предыстория :) о моей реализации. Как использовать BackGroundWorker в файле класса?
Событие DoWork выполняется нормально, но не вызывает RunWorkerCompleted.
Я поискал в Google и нашел эту ссылку. У меня такое чувство, что моя проблема такая же, как у этих ребят. 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;
}