我遇到了这个错误,看起来是因为同一个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.InvalidOperationException”的一次首要机会异常发生在 System.Drawing.dll 中
错误: 对象当前正在被其他地方使用。
在 System.Drawing.Graphics.FromImage(Image image) 处
在(指向包含 var g = Graphics.FromImage(myImage); 的行)