我收到了这个错误,看起来是因为不同的线程正在访问同一个 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
将只有一个实例。MyImage
对和Refresh()
可能来自不同线程的调用。据我了解,里面的代码lock(locker)
在另一个线程中完成之前不会被执行,但我仍然得到错误。任何人都可以指出代码中的缺陷吗?
异常看起来像这样:
System.Drawing.dll 中出现“System.InvalidOperationException”类型的第一次机会异常
错误:对象当前正在其他地方使用。
在 System.Drawing.Graphics.FromImage(图像图像)
at(指向包含 var g = Graphics.FromImage(myImage); 的行)