【问题标题】:Normal close for modeless forms and open modal forms in using block. Enough?使用块中的无模式表单和打开模式表单的正常关闭。足够?
【发布时间】:2012-04-13 06:10:47
【问题描述】:

正在开发 MDI Windows 窗体应用程序。

从欢迎(类似于主页)窗口,用户可以打开特定窗口来添加或编辑实体,例如订单或客户。每个都在其自己的无模式窗口中打开(作为 MDIChild)。 在某些情况下添加新记录是在模态窗口中完成的。

我没有明确地在无模式窗口上执行 Dispose()。根据调试期间的检查,当单击表单的关闭按钮时,会执行 Designer.cs 文件中的 Dispose() 方法并调用 base.Disposing 方法。我认为这是在单击关闭按钮时确实关闭了表单。

对于对话框窗口,我在 using 块中打开它们,据我所知,当 using 块结束时,它会从窗口中释放出来。

那么,我的整体理解和方法是否正确?

我对此进行了谷歌搜索。似乎有很多不同方法的坚定支持者,因此我有点不确定我的方法是否可行。

非常感谢您的澄清。

感谢和问候。

【问题讨论】:

  • 这很好,无需更改。

标签: c# .net winforms dispose


【解决方案1】:

你在 using 块中有变量吗?你过得很好。除非该类包含任何非托管资源。 C# 对话框和表单不是非托管的。 C# 中的大多数内容都是托管内存。所以使用应该足够了。

您有一个 using 子句,因此以下内容并不真正适用,但很高兴知道

“当 IDisposables 超出范围时,它们不会被处理掉吗?” 不,如果 IDisposable 对象是可终结的,这不是一回事,那么它会在垃圾回收时被终结。 这可能很快,也可能几乎永远不会。

这里有很多讨论可以帮助您了解更多信息

C# USING keyword - when and when not to use it?

我目前的理解是,除非您使用非托管资源,否则如果程序决定需要回收内存或程序以稳定状态关闭,垃圾收集器或关闭程序将处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多