繁体   English   中英

使用lock语句

[英]Using the lock statement

我有一个Bitmap,我正在尝试保存,我不断得到“对象目前在其他地方使用”错误。 现在我知道GDI +糟透了线程并且我应该使用lock{}语句但是它不起作用。 我的代码在下面,我做错了什么?

Bitmap bitmap = new Bitmap();

lock (bitmap)
{
    bitmap.Save([filepath], ImageFormat.Png);
}

您不应该锁定要锁定的对象。 你应该创建一个新的引用并锁定它。

object bitmapLock = new object();
Bitmap bitmap = new Bitmap();

lock (bitmapLock)
{
    bitmap.Save([filepath], ImageFormat.Png);
}

位图可能会锁定在您无法控制的不同位置。

在这里阅读lock声明。

编辑您可能必须修改创建它的线程上的位图。

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.80).aspx

你应该锁定其他虚拟对象:

var objectForLock = new object()

lock (objectForLock)
{
    Bitmap bitmap = new Bitmap();
    bitmap.Save([filepath], ImageFormat.Png);
}

不确定这是不是你的问题,但这就是lock在.Net中运行的方式。

在初始化位图之前,应该锁定同步。

您需要锁定所有操作,而不仅仅是保存。 锁定仅保存不会阻止其他线程操纵位图。

请注意,最好按照每个人的建议锁定单独的对象。

// class member (or even static) 
private object bitmapLock = new object();

// function 1
lock (bitmapLock)
{
    bitmap.Save([filepath], ImageFormat.Png);
}

// function 2
lock (bitmapLock)
{
   // Draw bitmap
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM