Я недавно начал работать с многопоточными приложениями Winform и столкнулся с проблемой, которую я не понимаю.
Обычно, когда я пытаюсь, чтобы фоновый работник сообщал о своем прогрессе, и этот прогресс исходит из расчета, он всегда равен нулю.
//making background worker
BackgroundWorker myJanitor = new BackgroundWorker();
myJanitor.WorkerSupportsCancellation = true;
myJanitor.WorkerReportsProgress = true;
myJanitor.DoWork += new DoWorkEventHandler(cleanContactList);
myJanitor.ProgressChanged += new ProgressChangedEventHandler(myCleaningWorker_ProgressChanged);
myJanitor.RunWorkerAsync();
Метод cleanContactList проходит по строкам DataGridView, во время которых я пытаюсь что-то вроде этого:
int percentComplete = (myRow.Index / contactGridView.Rows .Count ) * 100;
(sender as BackgroundWorker).ReportProgress(percentComplete);
К сожалению, процентComplete всегда будет нулевым. Если я отлаживаю его, я вижу, что происходит фактический расчет (например, [2000/10000] * 100), но результат всегда равен нулю.
Что мне здесь не хватает? Если я заменю вычисление, скажем, случайным вызовом Random.Next (0,100), оно будет обновлено.