WPF:我应该在ShowDialog方法打开的窗口上手动调用Close吗?

aks*_*aks 5 wpf dispose window showdialog

问题是WPF Window没有实现IDisposable接口,这让我相信,当我通过调用ShowDialog()打开它时我不必手动处理它,但是这个MSDN页面上的第一条评论说明不同.有谁知道真相是什么?

And*_*lam 6

仅当您使用Show()而不是ShowDialog()打开窗口时.

从文档:

如果通过调用ShowDialog打开的窗口以及其IsCancel属性设置为true的Button将在单击按钮或按下ESC时自动关闭.但是,如果使用Show打开窗口,则必须显式调用Close,例如来自Button的Click事件处理程序.

和:

关闭窗口会导致Closing事件被引发.如果未取消Closing事件,则会发生以下情况:

  • 从Application.Windows中删除窗口(如果存在Application对象).
  • 如果在显示拥有的窗口之前和打开所有者窗口之后建立了所有者/所有者关系,则会从所有者窗口中删除窗口.
  • Closed事件被提出.
  • 窗口创建的非托管资源将被释放.
  • 如果调用ShowDialog来显示Window,则显示ShowDialog.