【问题标题】:progress bar perform step in parallel foreach进度条并行执行步骤 foreach
【发布时间】:2013-11-02 14:04:30
【问题描述】:

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

     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'从一个访问 线程而不是创建它的线程。”

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

【问题讨论】:

    标签: parallel-processing progress-bar


    【解决方案1】:

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

    【讨论】:

    • 谢谢,那么您如何在代码方面进行同步?
    • 您需要创建一个锁定对象并在锁定部分调用进度条。您可以搜索“paralel.foreach 同步”。希望它有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多