GDI + LockBits()/ UnLockBits()异常

时间:2011-11-03 14:23:28

标签: c# bitmap gdi+

我的程序是用C#编写的,并用低级别的位图进行操作。一切正常,但有时(非常罕见,但稳定)异常“通用GDI +异常”发生,并且很难重现这种情况。

函数LockBits()和UnLockBits()发生异常。它包含错误代码“-2147467259”。在GDI +的语言中,它将是方法GdipBitmapLockBits并返回代码7或1.

可能导致这种情况的原因是什么?

任何答案都非常感谢。

2 个答案:

答案 0 :(得分:4)

GDI +对象不是线程安全的,并且在没有同步的情况下从多个线程使用它们肯定会导致崩溃。为了完整起见,我想补充一点,在释放位图之前可以释放支持GDI +位图的内存,在这种情况下,在尝试使用位图时,您将获得无效访问。只有在您自己分配像素数据并使用带有指向数据的指针的构造函数时才会发生这种情况,例如:http://msdn.microsoft.com/en-us/library/zy1a2d14.aspx

答案 1 :(得分:1)

我已经调查了这个问题,似乎它可能与线程有关。 我不确定究竟是什么导致了这个问题并且没有证据,但是在整个代码中设置锁之后问题似乎已经消失了。