.NET Framework(和OpenFileDialog
)中的FolderBrowserDialog
组件实现IDisposible
接口,这意味着我们应该在我们完成处理或发生不好的事情(非托管资源泄漏)后的某个适当时间调用其方法Dispose
。我是否必须在FolderBrowserDialog上调用Dispose方法?
在Visual Studio WinForm设计,如果我将一个FolderBrowserDialog
组件到窗体上,由设计器生成的代码似乎没有照顾这在所有,任何代码调用FolderBrowserDialog
Dispose方法。
相反,如果我拖动Timer
(中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
组件接受这种特殊待遇?
所有的shell对话框类包装只有一个Dispose()方法,因为它们从它们的Component基类继承了一个。它们实际上并不需要处理,当本机对话框关闭时,它们的非托管资源将在内部处理。 @thecoop正确地解释了他们如何避免Dispose()被调用。 –
嗨Hans(nobugz),很高兴见到你。看着Reflector,我在FolderBrowserDialog的RunDialog方法中找到对NativeWindow.DestroyHandle()的调用,所以我认为你是对的。 – kennyzx