ループをParallel.For
ループを使用してパネルに描画することはできますか?私はdouble型の多次元配列double[][] plants
を持っており、配列の各エントリがパネル上のグリッド内の矩形として描画されるように、列を並行して描画したいと考えています。私がしようとすると、grapahics.FillRectangle()
と行で Windowsフォーム平行描画
「System.InvalidOperationException」種類の例外がSystem.Drawing.dllで発生したが、ユーザーコードで処理されなかった
追加情報:オブジェクトは現在他の場所で使用されています。ここで
は、私が使用していたコードです:
Parallel.For(0, simWidth, i =>
{
Color plantColor;
RectangleF plantRectangle= new Rectangle();
SolidBrush plantBrush = new SolidBrush(Color.Black);
for (int j = 0; j < simHeight; ++j)
{
int r, g = 255, b;
r = b = (int)(255 * (Math.Tanh(simulation.plants[i, j]) + 1)/2.0);
plantColor = Color.FromArgb(100, r, g, b);
plantBrush.Color = plantColor;
plantRectangle.Location = new PointF(i * cellSize, j * cellSize);
graphics.FillRectangle(plantBrush, plantRectangle);
}
plantBrush.Dispose();
});
を私は何が起こっていることは、グラフィックスオブジェクトは一度に複数のコールを処理することができないということだと思います。これを回避する方法はありますか?私は各並列呼び出しでグラフィックスオブジェクトへのローカル参照を作成しようとしましたが、うまくいきませんでした。
'graphics'は' PaintEventArgs e'、 'e.Graphics'からのものでした。基本的にシミュレーションを「レンダリング」するので、私はそれを平行にすることを検討していました。良いアイデアのように 'Bitmap'サウンドをキャッシュして使用していただき、ありがとうございます! –