正确的方式来处置Hwnd IntPtr

iCa*_*arp 4 c# memory-leaks handle

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

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

IntPtr p = webBrowser1.FindForm().Handle;
Run Code Online (Sandbox Code Playgroud)

后来,我在一个重写的dispose方法中释放该句柄

    protected override void Dispose(bool disposing)
    {
        hwnd = IntPtr.Zero;
        base.Dispose(disposing);
    }
Run Code Online (Sandbox Code Playgroud)

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

对于某些人来说这可能是非常明显的,但我正在寻找内存泄漏,因此我正在尝试验证每行代码.

Ran*_*Ran 8

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

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

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