BackgroundWorker.ReportProgress脱离了方法

本文关键字:方法 ReportProgress BackgroundWorker | 更新日期: 2023-09-27 18:07:10

似乎无论我在哪里调用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(...
}

有人知道这是为什么吗?

BackgroundWorker.ReportProgress脱离了方法

是否设置了worker.WorkerReportsProgress=true ?否则,后台worker将异常终止,工作将不会被完成。

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

如果你在do work方法中,你的worker不应该为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));
        }
 }