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(...
}
有人知道这是为什么吗?
是否设置了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));
}
}