我是C#的新手,我尝试查看早期的文章,但没有找到一个好的答案。
在具有单个表单的C#Windows表单应用程序中,使用的是Form.Close()
更好还是Form.Dispose()
?
MSDN说,在调用Close时,对象中的所有资源都是关闭的,并且该表单也被处置。尽管有这些,但我在网上还是遇到了多个示例,这些示例遵循的是Dispose而不是Close。
一个人比另一个人有优势吗?在哪种情况下,我们应该优先选择另一种?
我是C#的新手,我尝试查看早期的文章,但没有找到一个好的答案。
在具有单个表单的C#Windows表单应用程序中,使用的是Form.Close()
更好还是Form.Dispose()
?
MSDN说,在调用Close时,对象中的所有资源都是关闭的,并且该表单也被处置。尽管有这些,但我在网上还是遇到了多个示例,这些示例遵循的是Dispose而不是Close。
一个人比另一个人有优势吗?在哪种情况下,我们应该优先选择另一种?
form.Visible = false;
,可以致电form.Hide()
。实际上,form.Hide()
只需设置即可this.Visible = false;
。
Answers:
MSDN上的这个论坛告诉您。
Form.Close()
发送适当的Windows消息以关闭Win32窗口。在该过程中,如果未模态显示表单,则在表单上调用Dispose。处置表单将释放表单所保留的非托管资源。如果执行
form1.Show()
或Application.Run(new Form1())
,则将在调用when时Close()
调用Dispose 。但是,如果您
form1.ShowDialog()
要模态显示该表单,则该表单将不会被处理,您需要自称form1.Dispose()
。我相信这是您唯一需要担心自己处理表格的时候。
通常,我总是主张为任何提供该方法的类显式调用Dispose方法,方法是直接调用该方法或将其包装在“ using”块中。
通常,实现IDisposible的类这样做是因为它们包装了一些需要释放的非托管资源。虽然这些类应具有充当保护措施的终结器,但调用Dispose将有助于更早地释放该内存,并降低开销。
对于Form对象,正如Kyra的链接所指出的,记录了Close方法可以代表您调用Dispose,因此您无需明确地这样做。但是,对我而言,这始终感觉像是依赖于实现细节。我更喜欢始终为实现它们的类同时调用Close和Dispose,以防止实现更改/错误以及清楚起见。正确实现的Dispose方法应该可以安全地多次调用。
不打电话 Close
可能绕过发送了一堆Win32消息,尽管我无法具体告诉您原因,但有人认为这很重要。
Close
具有引发事件(可以取消)的好处,以便(表单)局外人可以注意FormClosing
并FormClosed
做出相应反应。
如果您只处理表格,我不清楚是否提出FormClosing
和/或FormClosed
提出,但我将留给您进行试验。
使用using
是一个很好的方法:
using (MyForm foo = new MyForm())
{
if (foo.ShowDialog() == DialogResult.OK)
{
// your code
}
}
Close()-托管资源可以暂时关闭,也可以再次打开。
Dispose()-永久删除托管或非托管资源
ShowDialog()
。否则,Close()
也将配置表格。
如果您在窗体中使用form.close()并设置窗体的FormClosing事件,并且在此Event中使用form.close(),则您将陷入无限循环,并且发生了超出范围的争论,而解决方案是更改窗体FormClosing事件中的.close()与form.dispose()。希望这个小技巧对您有所帮助!!!