正确的方式来处置Hwnd IntPtr

时间:2012-10-19 18:13:40

标签: c# memory-leaks handle

我正在试图弄清楚以下情况是否会导致内存泄漏。

我从WebBrowser控件获取窗口句柄(这是有原因的)

IntPtr p = webBrowser1.FindForm().Handle;

稍后,我将在重写的dispose方法中释放该句柄

    protected override void Dispose(bool disposing)
    {
        hwnd = IntPtr.Zero;
        base.Dispose(disposing);
    }

我的Dispose方法背后是否存在可能导致内存泄漏的恶意?

这对某些人来说可能是显而易见的,但我正在寻找内存泄漏,因此我正在尝试验证每行代码。

1 个答案:

答案 0 :(得分:7)

将HWND设置为IntPtr.Zero没有任何意义。

IntPtr是一种值类型,因此拥有该变量中的值对任何内容都没有影响。它不会保持任何物体存活。这只是一个你设置为0的数字。

如果从现有窗口获得HWND,则不应该复制任何句柄,也不必释放它。表格关闭时,HWND将被销毁。