2010-02-17 487 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