.NET Framework中的FolderBrowserDialog
组件(和OpenFileDialog
)实现了IDisposible
接口(interface),这意味着我们应该在完成操作后的某个适当时间调用它的Dispose
方法,否则会发生不好的事情(非托管资源泄漏)。
在Visual Studio WinForm设计器中,如果我将FolderBrowserDialog
组件拖到窗体上,则设计器生成的代码似乎根本无法解决这个问题,没有代码调用FolderBrowserDialog
上的Dispose方法。
相反,如果我拖动一个也实现了Timer
接口(interface)的System.Windows.Forms
(即IDisposible
命名空间中的那个),则生成的代码将是:
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
通过将计时器与容器(this.components)关联,可以确保在处置容器时正确地处置计时器-发生在调用
Form.Close()
或Form.Dispose()
时。那么,为什么
FolderBrowserDialog
组件会得到这种特殊待遇? 最佳答案
好地方!原因可能是FolderBrowserDialog
没有提供采用IContainer
参数的构造函数,而Timer
却提供了。
至于为什么会这样,您只能询问原始的Winforms设计师。也许不是真的以这种方式在设计器中使用它?它们只是意味着它可以在using
语句的代码中使用?
请记住,FolderBrowserDialog
及其父级实际上并未从Dispose
覆盖Component
,因此实际上并不需要处理任何内容。
关于.net - 我必须在FolderBrowserDialog上调用Dispose方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7637488/