GetIconInfo功能无法正常工作

时间:2009-09-03 05:52:16

标签: c# bitmap cursor user32

我编写了一个应用程序,它使用GetIconInfo user32.dll函数获取当前游标的图标信息,它在一段时间内工作正常,但过了一段时间后它开始在{{{{}}中提供错误信息1}}(一些负值),当我在下一行尝试从ICONINFO.hbmMask获取Bitmap对象时,它会引发异常:

Bitmap.HBitmap(bitmask)

从那里开始,它不断给出这个异常,因为A Generic error occured in GDI+. 总是返回负值(所有这些代码都在循环中工作)..

任何人都可以告诉我这是什么问题吗?以及如何避免下一次迭代异常?

这是代码

GetIconInfo

2 个答案:

答案 0 :(得分:1)

你的循环有多大? GDI +资源是OS资源,可用性有限。

您可以通过监控流程分配的HANDLE来找出如果这是您的问题。如果GDI +在某个句柄计数(HBITMAP或HICON)达到限制时开始抱怨,那么您就知道必须更智能地处理您的资源。您可以先使用任务管理器来执行此操作,但可能需要切换到更复杂的软件,如Process Explorer

如果这是您的问题,那么您需要了解IDisposable,并确保在完成对象后调用Dispose(不会再渲染)。位图和图标以及大多数GDI +对象都实现了IDisposable。

此外,我不清楚,但您可能需要在某些原始GDI对象上调用DeleteObject(所有这些都取决于您获取句柄的位置)。

答案 1 :(得分:0)

查看此PInvoke示例,您是否正确删除了通过非托管代码提取的对象?