當我創建一個表單時,自動生成的代碼不包含重寫的Dispose方法。這是否意味着Dispose沒有被稱爲表單中的所有控件?Form.Dispose()是否在Dispose()中調用控件?
回答
當您在窗體上呼叫Dispose
時,它將爲其Controls
集合中的每個控件調用Dispose
。這些控件反過來也會這樣做,所以最終應該調用所有控件的方法Dispose
。請注意,這不是基於控件是否存在於設計者中;它基於在完成對Dispose
的調用時在表格的集合中找到的控件實例。
當我看到這種情況不會發生的唯一情況是,如果您自己創建一個容器控件並覆蓋Dispose
而不將該調用傳播到基類或遍歷包含的控件並在其上調用Dispose
。
它應該。您可能需要查看YourForm.designer.cs文件。它看起來是這樣的:
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing)
}
的base.Dispose();
通話將負責清理添加到表單控件。
這不完全正確;除非表單上有非UI組件(例如'Timer','HelpProvider'或'BackgroundWorker'),否則'components'字段爲'null'。 '組件'處理這些組件。它不*調用處理其他控件,如按鈕,文本框等。 – 2010-09-08 19:13:24
確切地說,表單的控件實際上是通過調用'base.Dispose()',即在'Control.Dispose()'內部處理的。實際上有更多的清理,正如您在使用Reflector查看「Form.Dispose()」時所看到的那樣。 – 2010-09-08 19:20:12
更新,感謝您的意見 – SwDevMan81 2010-09-08 19:26:46
- 1. 是否會自動調用Dispose?
- 2. form.dispose()總是調用驗證事件並顯示彈出消息
- 3. 在表單中調用Dispose
- 4. 在調用Dispose之前,是否需要關閉SqlDataReader?
- 5. 在.Set之後直接調用.Close(.Dispose)EventWaitHandle是否安全?
- 6. 我是否必須在FolderBrowserDialog上調用Dispose方法?
- 7. 我是否需要在託管對象上調用Dispose()?
- 8. Form.Dispose()方法內的安全調用
- 9. System.ComponentModel.Component上的Dispose方法是否釋放事件回調?
- 10. 用戶控件不處理時調用Dispose
- 11. C#Form.Close vs Form.Dispose
- 12. 避免顯式調用Dispose()是否合理?
- 13. 我是否需要調用.dispose()(javax.jcr.Binary)和.close()(java.io.InputStream)?
- 14. 我實際上是否需要調用FileStream.Close/Dispose
- 15. 爲什麼我需要調用ASP.NET控件上的dispose?
- 16. 是否存在微調的ActiveX控件?
- 17. 是否可以通過反射來檢查類型是否在使用塊中(調用Dispose)
- 18. 如果Dispose()被Finalizer調用,您能否觸發「Disposing」事件?
- 19. 從事件處理程序的實例調用Dispose是否安全?
- 20. 在C#中調用Dispose(IsDisposing)模式的目的是什麼?
- 21. 是否可以在IE ActiveX控件中調用Chrome Frame
- 22. InvalidAsynchronousStateException在函數中檢查控件是否需要調用
- 23. Android微調控件onselecteditem微調控件是否爲空?
- 24. 當調用Dispose()在WPF應用程序
- 25. 爲什麼Dispose被調用?
- 26. 當調用Dispose可觀察
- 27. WCF Dispose()未調用InstanceContectMode = PerSession
- 28. ViewModel Dispose不被調用
- 29. 在WindowsIdentity對象上調用Dispose()? C#
- 30. 應該在ReaderWriterLockSlim鎖上調用Dispose()嗎?
是的。組件的執行方式不同,這就是自動生成的Dispose()方法所要處理的內容。從Controls集合中刪除控件並且不處理它是一種很好的泄漏方法。 – 2010-09-08 19:48:30