我創建了一個窗口,像這樣:WPF窗口類銷燬
if (someCondition)
{
MyWindow wnd = new MyWindow();
wnd.Owner = this;
wnd.ShowDialog();
}
我想爲mywindow的析構函數在結束的方括號中調用,但事實並非如此。我是否需要爲MyWindow的析構函數調用類似delete/destroy的東西來調用?
我創建了一個窗口,像這樣:WPF窗口類銷燬
if (someCondition)
{
MyWindow wnd = new MyWindow();
wnd.Owner = this;
wnd.ShowDialog();
}
我想爲mywindow的析構函數在結束的方括號中調用,但事實並非如此。我是否需要爲MyWindow的析構函數調用類似delete/destroy的東西來調用?
的「析構函數」或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。
using (MyWindow wnd = new MyWindow())
{
wnd.Owner = this;
wnd.ShowDialog();
}
這將花括號,這是我認爲你正在尋找後打電話Dispose
你的窗口上。你的MyWindow
課程將需要實施IDisposable
。
一個小東西,你打開的窗口,然後想調用它的析構函數。這沒有什麼意義。你應該關閉窗口,然後它的析構函數將被隱式調用。
如果你想叫它明確,你應該在你的mywindow的類中重寫處置。在那裏你可以清理任何你想明確處理的資源。
ShowDialog'不會返回,直到Windows關閉 - 所以我不明白你的答案? – 2010-02-17 20:20:12
所以如果'ShowDialog'在對話框關閉前沒有返回,如果對話框仍然沒有被銷燬,那麼如何調用析構函數?這就是我想要做的。 – 2010-02-17 21:15:14
爲什麼你需要調用析構函數?如果您正在進行簡單的清理工作,請讓MyWindow實現IDisposable並在Dispose方法中執行清理。我不相信使用析構函數是個好主意。 – Charlie 2010-02-17 19:10:42