我编写了一个应用程序,它使用GetIconInfo
user32.dll
函数获取当前游标的图标信息,它在一段时间内工作正常,但过了一段时间后它开始在{{{{}}中提供错误信息1}}(一些负值),当我在下一行尝试从ICONINFO.hbmMask
获取Bitmap对象时,它会引发异常:
Bitmap.HBitmap(bitmask)
从那里开始,它不断给出这个异常,因为A Generic error occured in GDI+.
总是返回负值(所有这些代码都在循环中工作)..
任何人都可以告诉我这是什么问题吗?以及如何避免下一次迭代异常?
这是代码
GetIconInfo
答案 0 :(得分:1)
你的循环有多大? GDI +资源是OS资源,可用性有限。
您可以通过监控流程分配的HANDLE来找出如果这是您的问题。如果GDI +在某个句柄计数(HBITMAP或HICON)达到限制时开始抱怨,那么您就知道必须更智能地处理您的资源。您可以先使用任务管理器来执行此操作,但可能需要切换到更复杂的软件,如Process Explorer。
如果这是您的问题,那么您需要了解IDisposable,并确保在完成对象后调用Dispose
(不会再渲染)。位图和图标以及大多数GDI +对象都实现了IDisposable。
此外,我不清楚,但您可能需要在某些原始GDI对象上调用DeleteObject
(所有这些都取决于您获取句柄的位置)。
答案 1 :(得分:0)
查看此PInvoke示例,您是否正确删除了通过非托管代码提取的对象?