Winforms 处理MDI子窗体

Winforms 处理MDI子窗体,winforms,garbage-collection,dispose,mdi,Winforms,Garbage Collection,Dispose,Mdi,根据 关闭时未处理窗体的两个条件是(1)它 是多文档接口(MDI)应用程序的一部分 形式是看不见的;以及(2)您已使用 显示对话框。在这些情况下,您需要手动调用Dispose以 将窗体的所有控件标记为垃圾回收 对于第一个病例,我该如何处理?如果我手动释放表单的this.dispose(),并在dispose中设置断点(位于表单的设计器文件中),则永远不会到达断点 首先不要隐藏MDI子窗口,这没有什么意义。如果确实需要隐藏它们,则调用它们的Dispose()方法,而不是Close()方法。Disp

根据

关闭时未处理窗体的两个条件是(1)它 是多文档接口(MDI)应用程序的一部分 形式是看不见的;以及(2)您已使用 显示对话框。在这些情况下,您需要手动调用Dispose以 将窗体的所有控件标记为垃圾回收


对于第一个病例,我该如何处理?如果我手动释放表单的this.dispose(),并在dispose中设置断点(位于表单的设计器文件中),则永远不会到达断点

首先不要隐藏MDI子窗口,这没有什么意义。如果确实需要隐藏它们,则调用它们的Dispose()方法,而不是Close()方法。Dispose()还将关闭未隐藏的窗口。

若要在释放表单后再次显示表单,请检查表单的IsDisposed标志,以避免出现错误“无法访问名为的已释放对象”。我就是这么做的:
if(_form.IsDisposed)_form=new form()