当前位置:  开发笔记 > 开发工具 > 正文

处理WPF窗口的正确方法是什么?

如何解决《处理WPF窗口的正确方法是什么?》经验,为你挑选了3个好方法。

我有一个WPF窗口,我通过调用从另一个窗口创建Show(),然后让它Close()自己.当窗口关闭时,我希望它会死掉,调用它的析构函数,并删除它的所有子元素(比如计时器......).

调用此类操作的正确方法是什么?



1> Simon Buchan..:

Close()释放所有非托管资源,并关闭所有拥有Window的资源.

您需要确定性处置的任何其他受管资源都应该从Closed事件处理.

参考

(注意:删除以前的答案,这是一个完全错误的猜测)


WPF中的Window类没有Dispose()方法!

2> Samuel Jack..:

与Windows窗体不同,实际上需要显式处理的WPF元素非常少.

在窗口的情况下,调用Close()足以处理所有托管和非托管资源accorrding的文档.



3> rookie1024..:

为了以防万一,我会加上我的两分钱.

我的问题是我没有做足够的故障排除.我的窗口是一个可以打开,关闭和重新打开的子窗口,所以我添加了以下内容以防止它完全关闭:

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();
}

这很好 - 它删除了阻止窗口关闭的事件处理程序,然后关闭它.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有