我有一个WPF窗口,我通过调用从另一个窗口创建Show()
,然后让它Close()
自己.当窗口关闭时,我希望它会死掉,调用它的析构函数,并删除它的所有子元素(比如计时器......).
调用此类操作的正确方法是什么?
Close()
释放所有非托管资源,并关闭所有拥有Window
的资源.
您需要确定性处置的任何其他受管资源都应该从Closed事件处理.
参考
(注意:删除以前的答案,这是一个完全错误的猜测)
与Windows窗体不同,实际上需要显式处理的WPF元素非常少.
在窗口的情况下,调用Close()足以处理所有托管和非托管资源accorrding的文档.
为了以防万一,我会加上我的两分钱.
我的问题是我没有做足够的故障排除.我的窗口是一个可以打开,关闭和重新打开的子窗口,所以我添加了以下内容以防止它完全关闭:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = true; this.Hide(); }
但是,当调用Window.Close时,它只隐藏窗口.我最终抓住了并添加了以下内容:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = true; this.Hide(); } public void Close() { this.Closing -= Window_Closing; //Add closing logic here. base.Close(); }
这很好 - 它删除了阻止窗口关闭的事件处理程序,然后关闭它.