.NET WinForm GC问题

Axi*_*ili 1 .net c# garbage-collection winforms

这段代码干净了吗?

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

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

谢谢.

Jon*_*eet 7

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

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

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

来自以下文件ShowDialog():

与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,.NET Framework不会调用Close方法.而是隐藏表单,并且可以在不创建对话框的新实例的情况下再次显示该表单.因为显示为对话框的表单未关闭,所以当应用程序不再需要该表单时,必须调用表单的Dispose方法.