我正在使用SHGetFileInfo来获取特定文件类型的图标。MSDN关于SHFILEINFO说:
hIcon
类型:HICON
表示文件的图标句柄。在不再需要它时,您必须使用DestroyIcon销毁此句柄。
要从HIcon中获取图标,我使用Icon.FromHandle。同样,MSDN说:
备注
使用此方法时,您必须使用Win32 API中的DestroyIcon方法处理原始图标,以确保释放资源。
这更加令人困惑,因为SGHFI_ICON的描述包含以下信息:
SHGFI_ICON(0x000000100)
检索表示文件的图标和系统映像列表中图标的索引的句柄。将句柄复制到由psfi指定的结构的hIcon成员中,并将索引复制到iIcon成员中。
从这个描述中,似乎句柄是由操作系统保留的,我实际上不应该销毁它。
我的问题是:如果可以的话,何时应该处理图标句柄?
立即在Icon.FromHandle()之后?
当我不再需要从Icon.FromHandle()创建的图标时?(在这种情况下,我想我会复制图标,释放原始图标并返回副本,以避免泄漏句柄)
永远不要(它会以某种方式自动完成吗?许多SHGetFileInfo的示例 - 甚至在SO上 - 都不包括任何释放图标句柄的代码)?
hIcon
类型:HICON
表示文件的图标句柄。在不再需要它时,您必须使用DestroyIcon销毁此句柄。
要从HIcon中获取图标,我使用Icon.FromHandle。同样,MSDN说:
备注
使用此方法时,您必须使用Win32 API中的DestroyIcon方法处理原始图标,以确保释放资源。
这更加令人困惑,因为SGHFI_ICON的描述包含以下信息:
SHGFI_ICON(0x000000100)
检索表示文件的图标和系统映像列表中图标的索引的句柄。将句柄复制到由psfi指定的结构的hIcon成员中,并将索引复制到iIcon成员中。
从这个描述中,似乎句柄是由操作系统保留的,我实际上不应该销毁它。
我的问题是:如果可以的话,何时应该处理图标句柄?
立即在Icon.FromHandle()之后?
当我不再需要从Icon.FromHandle()创建的图标时?(在这种情况下,我想我会复制图标,释放原始图标并返回副本,以避免泄漏句柄)
永远不要(它会以某种方式自动完成吗?许多SHGetFileInfo的示例 - 甚至在SO上 - 都不包括任何释放图标句柄的代码)?