GDI + LockBits () / UnLockBits () Исключение - PullRequest
4 голосов
/ 03 ноября 2011

Моя программа написана на C # и обрабатывает растровые изображения на низком уровне. Все работает нормально, но иногда (очень редко, но стабильно) возникает исключение «Универсальный GDI + исключение», и очень сложно воспроизвести такие ситуации.

Исключение происходит для функций LockBits () и UnLockBits (). Он содержит код ошибки "-2147467259". На языке GDI + это будет метод GdipBitmapLockBits и код возврата 7 или 1.

Какие причины могут быть причиной таких ситуаций?

Любые ответы очень ценю.

Ответы [ 2 ]

4 голосов
/ 03 ноября 2012

Объекты GDI + не являются поточно-ориентированными, и использование их из нескольких потоков без синхронизации, безусловно, может привести к сбоям. Для полноты я хочу добавить, что можно освободить память, поддерживающую растровое изображение GDI +, перед освобождением растрового изображения, и в таких случаях вы получите недопустимый доступ при попытке использовать растровое изображение. Это может произойти только в том случае, если вы сами выделяете данные пикселей и используете конструктор, который получает указатель на данные, например, такой: http://msdn.microsoft.com/en-us/library/zy1a2d14.aspx

1 голос
/ 02 ноября 2012

Я исследовал эту проблему и похоже, что она может быть связана с потоками.Я не знаю наверняка, что действительно вызывает эти проблемы, и у меня нет доказательств, но после установки блокировок по всему коду проблема, похоже, ушла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...