首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# Form.Close vs Form.Dispose

C# Form.Close vs Form.Dispose
EN

Stack Overflow用户
提问于 2010-06-23 05:41:34
回答 6查看 116.1K关注 0票数 90

我是C#的新手,我试着看了之前的帖子,但没有找到一个好的答案。

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

MSDN表示对象内的所有资源都已关闭,并在调用Close时释放表单。尽管如此,我还是在网上看到了几个遵循Dispose而不是Close的例子。

其中一个比另一个更有优势吗?在哪些情况下,我们应该优先选择其中一个?

EN

回答 6

Stack Overflow用户

发布于 2010-06-23 05:54:59

作为一般规则,我总是主张为提供Dispose方法的任何类显式调用Dispose方法,要么直接调用该方法,要么包装在"using“块中。

大多数情况下,实现IDisposible的类之所以这样做,是因为它们包装了一些需要释放的非托管资源。虽然这些类应该有终结器作为保护措施,但调用Dispose将有助于更早地释放内存,并降低开销。

在Form对象的情况下,正如Kyra的链接所指出的,Close方法被记录为代表您调用Dispose,因此您不需要显式地调用Dispose。然而,对我来说,这总是感觉像是依赖于实现细节。我更喜欢总是为实现它们的类同时调用Close和Dispose,以防止实现更改/错误,并且为了清晰起见。正确实现的Dispose方法应该可以安全地多次调用。

票数 15
EN

Stack Overflow用户

发布于 2010-06-23 05:47:29

不调用Close可能会绕过发送一堆Win32消息,尽管我不能具体告诉您原因,但人们会认为这些消息有些重要……

Close的好处是可以引发事件(可以取消),这样外部人员(对于表单)可以监视FormClosingFormClosed,以便做出相应的反应。

如果您只是简单地处理表单,我不清楚是否会引发FormClosing和/或FormClosed,但我将把它留给您进行实验。

票数 6
EN

Stack Overflow用户

发布于 2018-03-01 01:29:21

使用using是一种非常好的方式:

代码语言:javascript
复制
using (MyForm foo = new MyForm())
{
    if (foo.ShowDialog() == DialogResult.OK)
    {
        // your code
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3097364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档