似乎无论我在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(...
}
有谁知道为什么会这样?
答案 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));
}
}