在C#wpf的关闭窗口中看到的后面发生了什么

时间:2014-10-15 12:52:22

标签: c# wpf object memory-leaks reference

我使用这个传递Window1的对象作为Window2的引用。然后我关闭Window1并尝试使用Window2中的按钮单击显示Window1 我收到的错误通常可以与wpf中的任何开发人员一起使用。错误是:在窗口关闭后无法设置可见性或调用Show,ShowDialog。

按钮点击Window1.xaml.cs中的方法
{
    Window2 w2 = new Window2();
    w2.w1Obj = this;
    w2.show();
}

然后我关闭Window1。

按钮点击Window2.xaml.cs中的方法
{
w1Obj.testMethod();
this.w1Obj.show();
}

这里testMethod()执行得很好,但是当我想要显示该窗口时,它会崩溃。所以当我关闭那个Window时,我想知道内存中发生了什么或者Window1对象发生了什么。这是内存泄漏吗?

1 个答案:

答案 0 :(得分:1)

您应该尝试使用Window.Hide()而不是Window.Close()。

调用Window.Close()时:

  

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

     

从Application.Windows中删除Window(如果存在Application对象)。

     

如果在显示拥有的窗口之前和打开所有者窗口之后建立了所有者/拥有关系,则会从所有者窗口中删除窗口。

     

提出已结束的事件。

     

窗口创建的非托管资源将被处理。

     

如果调用ShowDialog来显示Window,则显示ShowDialog。

     

关闭窗口会导致其拥有的所有窗口都关闭。此外,关闭Window可能会导致应用程序停止运行,具体取决于Application.ShutdownMode属性的设置方式。

您可以在Closing Event

上找到有关闭幕活动的更多信息