.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/

10-10 03:40