Отчет о многопоточности не работает - PullRequest
1 голос
/ 11 февраля 2012

Я недавно начал работать с многопоточными приложениями 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), оно будет обновлено.

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Попробуйте индекс * 100 / кол. Я думаю, что вы делите два целых числа на 0, затем умножаете на 100.

Например, это:

        int index = 50;
        int count = 100;

        int percent = index/count * 100;
        int percent2 = index * 100/count;

        Console.WriteLine("{0} & {1}", percent, percent2);

Выходы 0 и 50.

0 голосов
/ 11 февраля 2012

[2000/10000] * 100), но результат всегда равен нулю

C # 101 для начинающих.На самом деле больше программирования - это то же самое в большинстве языков, которые знают типы переменных.

Операции выполняются с самым большим типом переменной, включенным в список.

2000 (целое число) / 10000 (целое число) - целое числоокругленный результат = 0

Я предлагаю вам ПЕРВЫЙ умножать, ТО делить.Или выберите другой тип переменной либо в переменных, либо в формуле (т. Е. [(Float) 2000 преобразует весь формулат в значения с плавающей запятой.

...