我创建了一个这样的窗口:
if (someCondition)
{
MyWindow wnd = new MyWindow();
wnd.Owner = this;
wnd.ShowDialog();
}
我想在结束的大括号中调用MyWindow的析构函数,但事实并非如此。我是否需要为MyWindow的析构函数调用delete / destroy之类的东西?
答案 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。在那里,您可以清理任何想要明确处理掉的资源。