1

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

     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'从创建它的线程以外的线程访问。”

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

4

1 回答 1

0

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

于 2014-02-13T12:35:04.533 回答