BackgroundWorker.ReportProgress突破了方法

时间:2011-08-29 16:57:55

标签: c# wpf progress-bar backgroundworker

似乎无论我在BackgroundWorker上调用ReportProgress,该方法的处理都会停止,因此我的工作永远不会完成。例如:

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 个答案:

答案 0 :(得分:1)

您是否设置了worker.WorkerReportsProgress=true?否则,后台工作程序将以异常终止,并且不会完成工作。

答案 1 :(得分:0)

我建议将计算逻辑分离到不同的行。我讨厌从其他开发者那里看到这样的内联内容。它更难阅读,更难调试(正如你的问题所指出)。

如果你在do work方法中,你的工作者永远不应该为null。虽然我建议执行空检查 - 如果此处存在空值,则其他内容严重错误。

 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));
        }
 }