System.Drawing.Graphics.DrawLines(Pen pen, PointF[] points)
マルチスレッド アプリケーションでメソッドを使用していますが、System.Drawing.Graphics
スレッド間で共有されていません。
なぜ投げ続けるのSystem.InvalidOperationException: The object is currently in use elsewhere
ですか?
System.Drawing.Graphics.DrawLines(Pen pen, PointF[] points)
マルチスレッド アプリケーションでメソッドを使用していますが、System.Drawing.Graphics
スレッド間で共有されていません。
なぜ投げ続けるのSystem.InvalidOperationException: The object is currently in use elsewhere
ですか?
問題は、すべてのスレッドで同じ System.Drawing.Pen インスタンスを使用していたことです。問題を解決するには、スレッドごとにクローンを作成する必要がありました。
var pens = new Pen[0];
lock (this._pens)
{
pens = (Pen[])this._pens.Select(a => (Pen) a.Clone()).ToArray();
}
この問題を解決するには、ロックさえも不可欠です
簡単な答え: そうしないでください。GUI スレッドでのみ GUI にアクセスします。