c # backgroundWorker не вызывает события ProgressChanged или RunWorkerCompleted

Использование C # .NET 3.5.

Кажется, я не единственный, так как поиск, кажется, поднимает много похожих вопросов, однако, читая их, я все еще чтобы не было решения.

Я вызываю событие нажатием кнопки на моем пользовательском интерфейсе, который затем должен запускать backgroundWorker для выполнения некоторой трудоемкой работы - в данном случае я хочу, чтобы он собирал информацию из форма и a) запись в файл xml, а также b) вставка информации в удаленную базу данных.

Это именно то, что backgroundWorker был разработан и предназначен для выполнения, я полагаю.

Вот код, вызывающий событие .

private void btnFinish_Click(object sender, EventArgs e)
{
    clkFinish.setInstant();
    curAct.setTimeFinish(DateTime.Now);
    btnStart.Enabled = true;
    bgwDataWorker.RunWorkerAsync();
    for (int i = 0; i < 20; i++)
    {
        Console.WriteLine("Thread a: " + i);
        Thread.Sleep(100);
        if (i == (20 - 1))
        {
            Console.WriteLine("Finished");
        }
    }

}

Как видите, у меня есть код, который я использовал как противовес фоновому рабочему коду, который находится здесь:

private void bgwDataWorker_DoWork(object sender, DoWorkEventArgs e)
{
    Console.WriteLine("Running in a different thread now");
    int count = 0;
    for (int i = 0; i < 21; i++)
    {
        Console.WriteLine("Thread b: " + i);
        Thread.Sleep(100);
        (sender as BackgroundWorker).ReportProgress(5 * i, null);
        if (i == (21 - 1))
        {
            count = i;
        }
    }
    e.Result = count;
}

Пока что, похоже, что до этого момента все работает.

Моя проблема в том, что когда код в методе DoWork завершен, ничего не происходит. Вот методы ProgressChanged и RunWorkerComplete.

private void bgwDataWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    Console.WriteLine(e.ProgressPercentage);
}

private void bgwDataWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    Console.WriteLine("Result is " + e.Result.ToString());

}

Это меня озадачило.

Я пробовал запускать примеры из MSDN , и у меня возникли те же проблемы. События RunWorkerCompleted и ReportProgress просто не возникают по какой-то причине, и я не понимаю почему.

Спасибо за чтение.

Алан

5
задан inksmithy 24 May 2011 в 09:39
поделиться