WPF窗口类破坏

时间:2010-02-17 19:02:11

标签: c# wpf window destructor

我创建了一个这样的窗口:

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

我想在结束的大括号中调用MyWindow的析构函数,但事实并非如此。我是否需要为MyWindow的析构函数调用delete / destroy之类的东西?

3 个答案:

答案 0 :(得分:3)

每当垃圾收集器感觉到时,就会在C#中调用“析构函数”或finalizer。您可以使用System.GC.Collect()手动触发垃圾收集器,但you probably don't want to do this。如果你在谈论Dispose(),你可以通过在“using”子句中创建窗口来调用它:

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

这将使using子句完成时调用wnd.Dispose(),并且基本上与写入相同:

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

关于IDisposable界面this question的使用可能会有所帮助 - several more on StackOverflow

答案 1 :(得分:1)

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

这将在大括号后调用窗口上的Dispose,这是我认为您正在寻找的。您的MyWindow课程需要实施IDisposable

答案 2 :(得分:0)

一件小事,你打开窗户然后想要叫它的析构函数。这没有多大意义。你应该关闭Window,然后隐式调用它的析构函数。

如果要明确调用它,则应在MyWindow类中重写Dispose。在那里,您可以清理任何想要明确处理掉的资源。