.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