0

我有一个需要执行特定操作的类。根据输入数据,可能会显示一些对话框。这些对话框需要使用父窗口的句柄来调用,以便它们正确居中等。

private IntPtr _parentWindow;
...
System.Windows.Forms.MessageBox.Show(System.Windows.Forms.Control.FromHandle(_parentWindow), "message");

最终关闭父窗体后,我的类的实例仍然存在,_parentWindow 仍然分配了一个值。

这样做安全吗?或者 GC 会不会因为 _parentWindow 被句柄填充而完全处理表单?

4

1 回答 1

0

不,保持窗口句柄的值不会阻止窗口被破坏或其资源被完全释放。

GC不负责释放窗体的非托管资源(所说的资源就是窗口句柄,最终通过释放DestroyWindow),也不IntPtr以特殊的方式对待成员。

于 2012-11-20T11:20:48.513 回答