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 に答える