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

van*_*ja. 51 wpf window

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

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

Sim*_*han 64

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

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

参考

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

  • WPF中的Window类没有Dispose()方法! (3认同)

Sam*_*ack 13

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

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


roo*_*024 11

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

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

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
  e.Cancel = true;
  this.Hide();
}
Run Code Online (Sandbox Code Playgroud)

但是,当调用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();
}
Run Code Online (Sandbox Code Playgroud)

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