2011-11-03 128 views
3

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

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

什么样的原因可能会导致此类情况?

任何答案非常感谢。

+0

您能否粘贴显示代码的代码片段? –

+1

位图数据的底层存储有问题。可以被锁定(避免线程),可能是一个处置的内存流,可能不在虚拟内存中。 –

+0

你有权限读取/写入位图吗? – Hans

回答

1

我调查了这个问题,它似乎可能与线程连接。 我不知道是什么原因导致了这个问题,并且没有证据,但是在整个代码中设置锁后,问题似乎已经消失。

3

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