正确的处理Hwnd IntPtr的方法

4
我正在试图弄清楚以下情况是否会产生内存泄漏。
我从WebBrowser控件中获取窗口句柄(有理由这样做)。
IntPtr p = webBrowser1.FindForm().Handle;

稍后,在重写的dispose方法中释放该句柄。
    protected override void Dispose(bool disposing)
    {
        hwnd = IntPtr.Zero;
        base.Dispose(disposing);
    }

我的Dispose方法背后是否隐藏着一些邪恶的东西,可能会导致内存泄漏?

这对于一些人来说可能很明显,但是我正在查找内存泄漏,因此我正在尝试验证每一行代码。


我认为,你的代码只是将包含 WebBrowser 控件的主窗口的本地句柄设置为零。这不会处理 WebBrowser 控件。处理你的窗体应该可以解决问题。 - ralf.w.
这里不需要销毁浏览器,它会在窗体被销毁时自动销毁。 - iCantSeeSharp
1个回答

8

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

IntPtr是一个值类型,因此在该变量中具有该值对任何事情都没有影响。它不会使任何对象保持活动状态。这只是一个您设置为0的数字。

如果您从现有窗口获取了HWND,则不应复制任何句柄,也不必释放它。当窗体关闭时,HWND将被销毁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接