2013-11-02 48 views
1

执行步骤我有一个简单的代码,这是否:进度条并行的foreach

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



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

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

“跨线程操作无效:控制' Progress_Bar_Loading_Images'从 线程访问,而不是它创建的线程。“

如何在不移除进度条的情况下解决该问题?我真的需要它来显示进度

回答

0

当您使用Parallel.Foreach时,每个迭代(或它的一组)在另一个线程上同时执行(在不同的处理器上运行)。但是,进度条正在处理主线程(或GUI线程),所以您需要在每次调用进度条后同步线程。 在这里要提到的一个重要的事情是每个步骤的同步是缓慢和毫无意义的。所以我建议你把一个条件依赖于索引的模数来说“每10步同步”。

+0

谢谢,那么你如何在Code中同步? – Matimont

+0

您需要创建一个锁定对象并调用锁定部分的进度条。您可能会搜索“paralel.foreach同步”。希望它有效 –