Использование C # .NET 3.5.
Кажется, я не единственный, так как поиск, по-видимому, поднимает много похожих вопросов, однако, читая их, я все еще не нашел решения.
Я вызываю событие нажатием кнопки на моем пользовательском интерфейсе, который затем должен запускать backgroundWorker для выполнения некоторой трудоемкой работы - в этом случае я хочу, чтобы он собирал информацию из формы и а) записывал в XML-файл, а также б) вставить информацию в удаленную базу данных.
Это именно то, для чего 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 по какой-то причине просто не генерируются, и я не понимаю, почему.
Спасибо за чтение.
Alan