进度条并行执行步骤

时间:2013-11-02 14:04:30

标签: parallel-processing progress-bar

我有一个简单的代码可以做到这一点:

     private List<DicomImage> img = new List<DicomImage>();



  Parallel.ForEach(ofdmulti.FileNames, filename =>
                {
                    img.Add(new DicomImage(filename));
                    Progress_Bar_Loading_Images.PerformStep();
                } 
                );

当我执行它时,我收到一个错误:

“跨线程操作无效:从a访问控制'Progress_Bar_Loading_Images' 线程以外的线程。“

如何在不删除进度条的情况下解决这个问题?我真的需要它来展示进展

1 个答案:

答案 0 :(得分:0)

当您使用Parallel.Foreach时,每个迭代(或其中的一组)同时在另一个线程(幸运地在不同的处理器上)执行。但是,进度条正在处理主线程(或GUI线程),因此您需要在每次调用进度条后同步线程。 在这里要提到的一件重要的事情是,每个步骤的同步都是缓慢且无意义的。所以我建议你根据索引的模数设置一个条件来说“为每10个步骤同步”。