2009-08-07 146 views
6

方法我有一個簡單的WPF單一窗口的應用程序包含文本框和按鈕。而且我還在WPF窗口中使用Windows Forms的NotifyIcon和DateTimePicker。我怎樣纔能有效地處理所有的控制?當調用Dispose()在WPF應用程序

回答

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); 
    } 
}