【问题标题】:Does holding the windows handle (IntPtr) in a variable prevent the form from being properly disposed?将窗口句柄 (IntPtr) 保存在变量中是否会阻止正确处理表单?
【发布时间】:2012-11-20 11:17:18
【问题描述】:

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

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

最终关闭父窗体后,我的类的实例仍然存在,_parentWindow 仍然被赋值。

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

【问题讨论】:

  • GC 从不直接处理任何对象。 Handle 不是引用,因此当您显式或隐式调用其 Dispose 方法时,Form 将被释放。

标签: c# intptr


【解决方案1】:

不,保留窗口句柄的值不会阻止窗口被销毁或其资源被完全释放。

GC不负责释放表单的非托管资源(说的资源就是window handle,这个最终是通过DestroyWindow释放的),也不对IntPtr成员做特殊处理。

【讨论】:

  • 谢谢,有问题的父窗口相当大,可能会在用户交互期间再次创建。
猜你喜欢
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多