並列実行のためのバッファリング サンプルの最適化に基づいて、この質問が発生しました。
要するに:
このコードは、別のスレッドの要素にアクセスできないという多くの例外をスローします。空のファイル名を作成し、3 桁ごとにスキップします。
目標は、バイト配列を画像に並列に変換する際に番号付け (Nummerierung) を混同しないようにすることです。説明はリンク先を参照してください。
何を変更する必要がありますか?
Action action = () =>
{
ArrayAnsammlung.TryTake(out data);
if (data != null)
{
Nummerierung = Convert.ToString(Interlocked.Increment(ref Nummerierungszaehler));
Enkodierung = null;
Enkodierung = new JpegBitmapEncoder();
Enkodierung.FlipHorizontal = true;
var dateiStrom = new FileStream("E:\\Temp\\" + datum + " " + Nummerierung.PadLeft(12, '0') + ".jpg", FileMode.Create);
Enkodierung.Frames.Add(BitmapFrame.Create(BitmapSource.Create(bildbreite, bildhoehe * 2,
96, 96, PixelFormats.Bgr32, null, data, stride)));
Enkodierung.Save(dateiStrom);
dateiStrom = null;
Enkodierung = null;
}
};
while (aufnahme)
{
try
{
Parallel.Invoke(action, action, action, action, action);
}
catch (AggregateException oo)
{
Console.WriteLine(oo.ToString());
}
Thread.Sleep(2000);
}