我继承了一些代码,想要大家运行这个修改,我关心的是内存管理。
让我们说我有一个“基础”表格,其中有一串打开“对话框”表格的按钮。打开对话框表单的推荐模式是什么?目前我们显示“对话框”表单(在“基本”表单代码中,单击按钮时):
ChangePasswordForm frm = new ChangePasswordForm();
frm.ShowDialog();
然后关闭它(在“对话框”表单代码中):
private void bCancel_Click(object sender, EventArgs e)
{
this.Close();
//this.Dispose(); <-- this is what I am considering adding.
}
我添加Dispose的理由是,我担心如果每次创建表单的 new 实例并且其资源从未真正发布时,此表单会多次显示和关闭 - 是这个对吗?另外,如果表单右上角有“close”X,我是否应该在FormClosed事件中调用Dispose()?
提前致谢。
答案 0 :(得分:26)
我会使用using
声明:
using (var frm = new ChangePasswordForm()) {
frm.ShowDialog();
}
将它与DialogResult结合使用:
private void bCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
设置DialogResult,将关闭对话框,并且来电者/所有者有一些反馈。
您不必担心关闭或处置。
答案 1 :(得分:18)
根据MSDN,您需要在两个条件下处置:
表单未在Close上处理时的两个条件是(1)它是多文档界面(MDI)应用程序的一部分,并且表单不可见; (2)您使用ShowDialog显示了表单。在这些情况下,您需要手动调用Dispose以标记所有表单的垃圾收集控件。
在using语句中声明表单将是处理此问题的合适方法。
using (ChangePasswordForm frm = new ChangePasswordForm())
{
frm.ShowDialog();
}