【发布时间】:2016-09-15 20:07:01
【问题描述】:
我有这个简单的:
for (int i = 0; i < nro_archivos; ++i) //Cargar el objeto img
{
string nombrearchivo = archivosdicom[i].FullName;
img.Add(new ImagenDicom(nombrearchivo));
Progress_Bar_Loading_Images.PerformStep();
}
接下来是:
decimal[] sliceseparation_imagen = new decimal[img.Count - 1];
for (int i = 0; i < img.Count; i++)
{
if (i < img.Count - 1)
{
sliceseparation_imagen[i] = Math.Abs(img[i + 1].Z - img[i].Z);
}
}
sliceseparation_promedio = sliceseparation_imagen.Average();
现在,我的挑战是: 我实现了Paralell For但不能使用进度条..所以我在考虑使用BackgroundWorker但问题是for之后的操作取决于在for中发生的对象img的负载,直到没有完成我无法继续。 我对BackGroundWorker的理解是,它在后台执行,而主程序继续执行,所以这种方式在尝试访问到主程序到达for之外的代码时还没有创建的img对象时会带来错误。
在这种情况下是否值得使用Background Worker来加速img对象的加载?如果是这样,我如何等到后台工作人员完成其工作后再继续执行主程序?我需要向用户报告 for 操作的进度,因此在没有允许我向用户报告的情况下使用并行 for 是行不通的。 谢谢, 马蒂亚斯。
【问题讨论】:
-
Background Worker 的一个特点是它的目的是在后台执行长时间的计算工作,而 UI 的更新可以通过主线程来处理。您可以处理 DoWork、ProgressChanged 等事件 - 报告可用于在您的案例中更新 Progressbar 的状态
-
谢谢奥斯汀,这对我来说很好,问题在于继续在主线程中执行的代码,它使用正在加载的对象 for(将在后台worker 如果我决定实现它)所以在它没有完成之前,我真的不能做太多,否则它会在尝试访问尚未加载的对象时抛出错误
标签: c# winforms parallel-processing backgroundworker parallel.for