2010-02-17 491 views
1

我創建了一個窗口,像這樣:WPF窗口類銷燬

if (someCondition) 
{ 
    MyWindow wnd = new MyWindow(); 
    wnd.Owner = this; 
    wnd.ShowDialog(); 
} 

我想爲mywindow的析構函數在結束的方括號中調用,但事實並非如此。我是否需要爲MyWindow的析構函數調用類似delete/destroy的東西來調用?

+0

爲什麼你需要調用析構函數?如果您正在進行簡單的清理工作,請讓MyWindow實現IDisposable並在Dispose方法中執行清理。我不相信使用析構函數是個好主意。 – Charlie 2010-02-17 19:10:42

回答

3

的「析構函數」或finalizer因爲它是所謂在C#中,每當垃圾收集感覺就像被調用。您可以使用System.GC.Collect()而不是you probably don't want to do this手動觸發垃圾收集器。如果你談論的Dispose(),另一方面可以讓這個被稱爲通過在「使用」的條款創建窗口:

using (var wnd = new MyWindow()) 
{ 
    wnd.Owner = this; 
    wnd.ShowDialog(); 
} 

這將使wnd.Dispose()時所使用的子句是被稱爲完了,就基本上是相同的文字:

var wnd = new MyWindow(); 
wnd.Owner = this; 
wnd.ShowDialog();  
wnd.Dispose(); 

關於IDisposable界面的使用this question可能是有益的 - 和several more on StackOverflow

1
using (MyWindow wnd = new MyWindow()) 
{ 
    wnd.Owner = this; 
    wnd.ShowDialog(); 
} 

這將花括號,這是我認爲你正在尋找後打電話Dispose你的窗口上。你的MyWindow課程將需要實施IDisposable

+1

不要過於迂腐,但班級已實施'IDisposable';它需要做的是重寫'Dispose'。 – 2010-02-17 19:50:03

+4

Robert:WPF Window類不實現IDisposable。 (它不包含任何非託管資源。)查理的權利,IDisposable需要在MyWindow派生類上實現。 – itowlson 2010-02-17 20:32:25

+2

Pedantry失敗.. – Charlie 2010-02-17 20:53:17

0

一個小東西,你打開的窗口,然後想調用它的析構函數。這沒有什麼意義。你應該關閉窗口,然後它的析構函數將被隱式調用。

如果你想叫它明確,你應該在你的mywindow的類中重寫處置。在那裏你可以清理任何你想明確處理的資源。

+0

ShowDialog'不會返回,直到Windows關閉 - 所以我不明白你的答案? – 2010-02-17 20:20:12

+0

所以如果'ShowDialog'在對話框關閉前沒有返回,如果對話框仍然沒有被銷燬,那麼如何調用析構函數?這就是我想要做的。 – 2010-02-17 21:15:14