C#Form.Close与Form.Dispose

我是C#的新手,我试图看看以前的post,但没有find一个好的答案。

在具有单一窗体的C#Windows窗体应用程序中,是使用Form.Close()更好还是Form.Dispose()

MSDN说,对象内的所有资源都closures,表单被调用时closures。 尽pipe如此,我在网上遇到了一些遵循Dispose而不是Close的例子。

一个人比另一个人有优势吗? 在哪种情况下,我们应该比另一种情况更喜欢?

MSDN上的这个论坛告诉你。

Form.Close()发送正确的Windows消息来closureswin32窗口。 在这个过程中,如果表单没有以模态方式显示,则在窗体上调用Dispose。 处理表单将释放表单所持有的非托pipe资源。

如果你做一个form1.Show()Application.Run(new Form1()) ,当调用Close()时将调用Dispose。

但是,如果您使用form1.ShowDialog()以模态方式显示表单,则表单将不会被处理,您需要自己调用form1.Dispose() 。 我相信这是你唯一一次担心自己处理表单的时候。

作为一般规则,我总是主张为提供它的任何类显式调用Dispose方法,方法是直接调用方法或包装在“使用”块中。

通常,实现IDisposible的类是这样做的,因为它们包装了一些需要释放的非托pipe资源。 虽然这些类应该具有作为安全措施的终结器,但调用Dispose将有助于更早地释放内存并降低开销。

在Form对象的情况下,正如Kyra所指出的那样,Close方法被logging为代表您调用Dispose,所以您不需要明确地这样做。 不过,对我来说,这总是感觉就像依靠一个实现的细节。 我更喜欢总是调用Close和Dispose来实现它们的类,以防止实现更改/错误,并且为了清晰起见。 正确实施的Dispose方法应该是安全的,可以多次调用。

没有调用Close可能绕过发送一串Win32的消息,人们会认为是有点重要,虽然我不能具体告诉你为什么…

Close有提升事件(可以取消)的好处,这样外部人员(对于表单)就可以观察FormClosingFormClosed ,从而做出相应的反应。

我不清楚FormClosing和/或FormClosed是否被提出,如果你只是处理表单,但我会留给你去试验。