2011-11-03 144 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