我是否必须在FolderBrowserDialog上调用Dispose方法?

时间:2011-10-03 16:00:09

标签: .net idisposable

.NET Framework中的FolderBrowserDialog组件(以及OpenFileDialog)实现了IDisposible接口,这意味着我们应该在我们之后的某个适当时间调用其Dispose方法。完成它或发生了一些不好的事情(非托管资源泄漏)。

在Visual Studio WinForm设计器中,如果我将FolderBrowserDialog组件拖到Form上,设计器生成的代码似乎根本不会处理这个问题,没有代码调用{{上的Dispose方法1}}。

相反,如果我拖动FolderBrowserDialogTimer命名空间中的那个也实现System.Windows.Forms接口的那个,生成的代码将是:

IDisposible

通过将计时器与容器(this.components)相关联,可确保在处理容器时正确处理计时器 - 在调用this.components = new System.ComponentModel.Container(); this.timer1 = new System.Windows.Forms.Timer(this.components); Form.Close()时发生。

为什么Form.Dispose()组件会接受这种特殊处理?

1 个答案:

答案 0 :(得分:3)

好地方!原因可能是FolderBrowserDialog不提供采用IContainer参数的构造函数,而Timer则执行。{/ p>

至于为什么会这样,你只能问原来的winforms设计师。也许它不是真的被设计成以这种方式在设计师中使用?它们只是意味着它在using语句中的代码中使用?

请注意,FolderBrowserDialog及其父母实际上并未覆盖Dispose中的Component,因此实际上并不需要 来处置任何东西。