1
私はいくつかのイメージを処理するためにParallel.Forループを使用しています。私は画像を保存しようとすると、時々、私はいくつかの画像を一般的なエラーがGDI +イメージはParallel.Forループで保存されません。
にを発生
exception-を取得する取得保存し、その後、この例外は、いくつかのファイルを保存した後、ランダムに来ます。
- は、私は私のコード - された別のビットマップ画像に元のビットマップイメージオブジェクトを割り当て、その後ファイルの下
を保存間で同期する
Monitor.Enter
を使用してみましたに保存しようとした Parallel.For(0, 14, cnt => { using (Bitmap originalImage = (Bitmap)Bitmap.FromFile(@imagePath)) { for (int i = 0; i < originalImage.Width; i++) { for (int x = 0; x < originalImage.Height; x++) { System.Drawing.Color oc = originalImage.GetPixel(i, x); int gray = (int)((oc.R * 0.3) + (oc.G * 0.59) + (oc.B * 0.11)); System.Drawing.Color nc = System.Drawing.Color.FromArgb(oc.A, gray, gray, gray); originalImage.SetPixel(i, x, nc); } } try { //Bitmap grayscaleImage = originalImage; //grayscaleImage.Save(@processesImagesPath + DateTime.Now.ToString("dd-MM-yyyy_hh.mm.ss") + ".jpg"); //line of exception //above lines did not work Monitor.Enter(originalImage); originalImage.Save(@processesImagesPath + DateTime.Now.ToString("dd-MM-yyyy_hh.mm.ss") + ".jpg"); //line of exception } finally { Monitor.Exit(originalImage); } } });
'imagePath'は' Parallel.For'で常に同じですか? – Backs
@Backsいいえ。ごめんなさい。私はコードを更新して、今すぐチェックしてください。 –
私は 'cnt'変数の使用法は表示されません。あなたは1つのファイルを14回並列に更新しようとしています。 – Backs