.NET WinForm GC问题

时间:2009-03-14 12:22:36

标签: c# .net winforms garbage-collection

此代码是否干净?

private void button1_Click(object sender, EventArgs e)
{
  frmCustomDialog f = new frmCustomDialog();
  if(f.ShowDialog() == DialogResult.OK)
    TextBox1.Text = f.MyCustomProperty;
}

您需要关闭或处理表格f或任何其他内容吗?还是自动垃圾收集?

谢谢。

2 个答案:

答案 0 :(得分:7)

是的,您应该处理以下表格:

private void button1_Click(object sender, EventArgs e)
{
    using (frmCustomDialog f = new frmCustomDialog())
    {
        if(f.ShowDialog() == DialogResult.OK)
        {
            TextBox1.Text = f.MyCustomProperty;
        }
    }
}

ShowDialog()不会处理该表单,因为您可以重复使用它并再次显示它。如果你不需要这样做,你应该自己处理它。

来自ShowDialog()的文档:

  

与无模式窗体不同,关闭   .NET不调用该方法   用户点击时的框架   关闭对话框的表单按钮或   设置DialogResult的值   属性。相反,表格是隐藏的   并且可以再次显示   创建对话框的新实例   框。因为表单显示为   对话框未关闭,您必须   调用表单的Dispose方法   当表格不再需要时   你的申请。

答案 1 :(得分:4)

如果您将窗体显示为对话框窗体(因为您使用form.ShowDialog()调用它),则必须手动处理该对象,因为窗体的Close方法不会自动调用关闭表单时(表单隐藏了)。

您可以阅读更多here