.NET Framework中的FolderBrowserDialog
组件(以及OpenFileDialog
)实现了IDisposible
接口,这意味着我们应该在我们之后的某个适当时间调用其Dispose
方法。完成它或发生了一些不好的事情(非托管资源泄漏)。
在Visual Studio WinForm设计器中,如果我将FolderBrowserDialog
组件拖到Form上,设计器生成的代码似乎根本不会处理这个问题,没有代码调用{{上的Dispose方法1}}。
相反,如果我拖动FolderBrowserDialog
(Timer
命名空间中的那个也实现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()
组件会接受这种特殊处理?
答案 0 :(得分:3)
好地方!原因可能是FolderBrowserDialog
不提供采用IContainer
参数的构造函数,而Timer
则执行。{/ p>
至于为什么会这样,你只能问原来的winforms设计师。也许它不是真的被设计成以这种方式在设计师中使用?它们只是意味着它在using
语句中的代码中使用?
请注意,FolderBrowserDialog
及其父母实际上并未覆盖Dispose
中的Component
,因此实际上并不需要 来处置任何东西。