Win32.DestroyIcon与Icon.Dispose

我有这行代码:

System.Drawing.Icon icon = System.Drawing.Icon.FromHandle(shinfo.hIcon); 

几行之后,在使用图标之后,我有一行:

 Win32.DestroyIcon(shinfo.hIcon); 

但是,当对我的代码运行静态分析时,它表示Resource_Leak可能来自图标。 我想知道如果我调用dispose方法会有什么不同:

 icon.Dispose(); 

而不是现在正在使用的Win32.DestroyIcon()。 它们之间有什么区别吗? 我只是维护这段代码所以我不确定原始开发人员是否有任何使用Win32.DestroyIcon的特殊内容。

静态分析正在触发,因为您没有处置“IDisposable资源”。

我建议坚持使用托管版本,并使用icon.Dispose() 。 这将(内部)负责为您调用DestroyIcon ,但始终坚持使用纯托管API。

Win32.DestroyIcon实际上更适用于您作为IntPtr接收的图标,而不是用于完全由框架管理的Icon实例。

我在这个领域没有悲伤 – 我一直试图在不泄漏资源的情况下为表单的图标(以及任务栏中的图标)设置动画。

当我处理图标(如MSDN上建议的)资源泄露时,当我使用“DestroyIcon”时,所有后续更新都失败了。 下面的代码以正确的顺序显示所有内容。

API声明:

 [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = CharSet.Auto)] extern static bool DestroyIcon(IntPtr handle); 

最后的解决方案:

 IntPtr iconHandle = dynamicBitmap.GetHicon(); Icon tempManagedRes = Icon.FromHandle(iconHandle); this.Icon = (Icon)tempManagedRes.Clone(); tempManagedRes.Dispose(); DestroyIcon(iconHandle); 

也发布在这个问题: Icon.FromHandle:我应该处理它,还是调用DestroyIcon?