4

我已经阅读(在usingStatement (C# Reference)上)该using语句应该用于释放使用非托管资源的托管类型(如 File 和 Font)使用的资源。所以开始将它与 MySql 类和相关的东西一起使用,但是如果你看一下 Windows.Forms.Form 类的一个对象,你会看到一个 Dispose 方法,这意味着这个类实现了 IDisposable 所以,我应该使用一个using语句像下面这种情况下的 Windows.Forms.Form 对象?

private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
    using (AboutBoxProjeto about = new AboutBoxProjeto())
    {
        about.ShowDialog();
    }
}
4

3 回答 3

8

来自http://dotnetfacts.blogspot.com/2008/03/things-you-must-dispose.html

在 .NET 中,对话框表单是通过调用 ShowDialog() 方法打开的表单。与无模式表单不同,当用户单击对话框的关闭表单按钮或设置 DialogResult 属性的值时,.NET Framework 不会调用 Close 方法。相反,该表单被隐藏并且可以再次显示而无需创建对话框的新实例。因为显示为对话框的表单没有关闭,所以当您的应用程序不再需要该表单时,您必须调用该表单的 Dispose() 方法

于 2013-05-17T13:28:56.153 回答
1

那是对的。根据经验,如果一个类实现了IDisposable接口,最好在不再需要实例时释放它。这将以早期、确定性的方式释放资源。如果您不这样做,终结器机制将充当安全网,资源仍将被释放,但是,您无法控制何时真正发生。

编辑:阅读接受的答案给出的链接后,似乎调用

Dispose()

当表单以模态方式显示时是必需的。我想有一个内部机制持有对阻止终结器运行的表单的引用。

编辑#2:不,在构建了一个简单的测试项目之后,我可以验证我最初的假设是正确的。终结器安全网能够运行并将正确释放模态表单的资源(ShowDialog()以 开头) - 以不确定的方式。

于 2013-05-17T13:31:03.777 回答
0

是的,对于短暂的表单(例如对话框),我肯定会建议将它们包装在 using 块中,就像您在代码示例中所做的那样,以确保它们被正确释放。

于 2013-05-17T13:25:02.613 回答