このエラーが発生しました。これは、同じ Bitmap オブジェクトが異なるスレッドによってアクセスされていることが原因のようです。しかし、私はどこでもロックを使用しています。
public class MySingleInstanceClass
{
private Object locker = new Object();
private Bitmap myImage = new Bitmap(100, 100);
public Bitmap MyImage
{
get
{
lock (locker)
return myImage;
}
private set
{
lock (locker)
myImage = value;
}
}
private void Refresh()
{
lock (locker)
{
var g = Graphics.FromImage(myImage);
// do more processing
}
}
}
クラスMySingleInstanceClass
には 1 つのインスタンスしかありません。への呼び出しとMyImage
、Refresh()
異なるスレッドからの呼び出し。私が理解している限り、内部のコードlock(locker)
は別のスレッドで終了するまで実行されませんが、それでもエラーが発生します。誰でもコードの欠陥を指摘できますか?
例外は次のようになります。
System.Drawing.dll で、タイプ 'System.InvalidOperationException' の初回例外が発生しました
エラー: オブジェクトは現在別の場所で使用されています。
System.Drawing.Graphics.FromImage(イメージ イメージ) で
at (var g = Graphics.FromImage(myImage); を含む行を指します)