Использование 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 просто не возникают по какой-то причине, и я не понимаю почему.
Спасибо за чтение.
Алан