BackgroundWorker.ReportProgress выходит за пределы метода - PullRequest
0 голосов
/ 29 августа 2011

Кажется, что где бы я ни вызывал ReportProgress на BackgroundWorker, обработка этого метода прекращается, поэтому моя работа никогда не заканчивается. Пример:

int numQuals = this.Model.Names.Count();
int currentQual = 0;
int fivePercent = (int)(numQuals * .05);
foreach (var qualName in this.Model.Names)
{
    if ((worker != null) && ((currentQual % fivePercent == 0)))
    {
        worker.ReportProgress((int) (((float)++currentQual / numQuals) * 100));
    }

    // This next line never processes. I can debug and it will 
    // break at the ReportProgress line but won't ever break here
    this.myContainer.Add(...
}

Кто-нибудь знает, почему это так?

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Вы установили worker.WorkerReportsProgress=true?В противном случае фоновый работник прекратит работу с исключением, и работа не будет выполнена.

0 голосов
/ 29 августа 2011

Я бы порекомендовал выделить вашу вычислительную логику в другую строку.Я ненавижу видеть подобные вещи от других разработчиков.Его сложнее читать и труднее отлаживать (как указывает ваш вопрос).

Ваш работник никогда не должен быть нулевым, если вы находитесь внутри метода do work.Хотя я рекомендую выполнять проверки на нуль - если здесь был ноль, то что-то еще не так.

 if ((worker != null) && ((currentQual % fivePercent == 0)))
 {
        object result =  ((float)++currentQual / (float)numQuals) * 100;
        int resultint = 0;
        if(Int32.TryParse(result.ToString(), out resultint))
        {
            worker.ReportProgress(Convert.ToInt32(result));
        }
 }
...