方法我有一個簡單的WPF單一窗口的應用程序包含文本框和按鈕。而且我還在WPF窗口中使用Windows Forms的NotifyIcon和DateTimePicker。我怎樣纔能有效地處理所有的控制?當調用Dispose()在WPF應用程序
6
A
回答
5
WPF中幾乎沒有什麼有Dispose
方法。絕大多數類都封裝了純粹的管理信息。您可以將一個對象插入到樹(例如通過Children.Add
方法),你可以再次將其刪除 - 這是國家管理是如何工作的。它完全不符合IDisposable
模式,因爲一旦你刪除了一個控件,你可以再次添加它,而Dispose
意味着永遠(儘管除了Add
//Remove
方法,你可以使用Dispose
來管理它。
A discussion about it on the Microsoft forums.
有幾件事情,應該是IDisposable
,但不是像DispatcherTimer
,並沒有什麼,從實現你自己的類IDisposable
阻止你。你應該打電話給Dispose
;基本上當你知道你不會再使用這個對象的時候。
對於Window
,您只需致電Close
即可關閉它,而WPF負責處理所有其他事情。
1
我會說在WPF應用程序中應用的規則與其他.NET應用程序一樣:如果某個對象實現了IDisposable
,則應在完成使用後調用Dispose
。如果動態加載和卸載控件,以及他們不執行IDisposable
,只設置任何引用null
(和拆卸任何事件處理程序)應該夠垃圾收集器來完成其工作。
0
如果控制一些的IContainer的一部分(這是在.NET中的通用模型)比你的控件只需要實現了IDisposable的。因此Dispose()會在適當的時候自動調用。
0
堅持CA1001:讓擁有類型實現IDisposable。
放棄所有控件爲IDisposable的舊Windows窗體事實。實施並致電Dispose
。
sealed partial class MainWindow : IDisposable {
readonly IDisposable disposable;
public MainWindow() {
disposable = ...
}
public void Dispose() {
disposable.Dispose();
}
protected override void OnClosed(EventArgs e) {
Dispose();
base.OnClosed(e);
}
}
相關問題
- 1. 從WPF應用程序調用Windows 8 Maps應用程序
- 2. WPF應用程序在WPF應用程序中運行
- 3. 在WPF/Surface應用程序內託管WPF/Surface應用程序
- 4. RaceOnRCWCleanup當關閉WPF應用程序
- 5. 調試Silverlight中的WPF應用程序
- 6. 在表單中調用Dispose
- 7. WPF應用程序
- 8. 如何從WPF應用程序調用.ashx處理程序?
- 9. 在C#中對線程實用程序使用'using' - 何時Dispose被調用?
- 10. 應該IDataReader :: Dispose調用IDataReader :: Close?
- 11. Twilio應用程序調用當應用程序在Android中關閉或死亡?
- 12. 多線程WPF應用程序:調度程序調用。更有效的方法?
- 13. 爲什麼需要在WPF應用程序中調用PropertyChanged
- 14. 如何在WPF應用程序中調用.exe
- 15. 錯誤在WPF應用程序異步調用WCF服務
- 16. 在WPF應用程序中使用GDI +
- 17. 在WPF應用程序中使用reCaptcha
- 18. 在WPF應用程序內嵌入Unity3D應用程序
- 19. 當在Mac應用程序
- 20. Silverlight或WPF應用程序或WPF瀏覽器應用程序在本地運行的應用程序?
- 21. WPF應用程序性能
- 22. Wpf複合應用程序
- 23. 與WPF應用程序
- 24. WPF應用程序崩潰
- 25. 測試WPF應用程序
- 26. Wpf應用程序部署
- 27. 多頁WPF應用程序
- 28. WPF應用程序佈局
- 29. C#WPF應用程序類
- 30. WPF應用程序凍結