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

在C#wpf中,在关闭窗口时看到的后面发生了什么,c#,wpf,object,memory-leaks,reference,C#,Wpf,Object,Memory Leaks,Reference,我正在使用它将Window1的对象作为参照传递给Window2。然后,我关闭Window1,并尝试使用从Window2单击按钮来显示Window1。 我得到一个错误,这是经常可能与任何开发人员在wpf。错误是:无法在窗口关闭后设置可见性或呼叫显示、显示对话框。 Window1.xaml.cs中的按钮单击方法 { window2w2=newwindow2(); w2.w1Obj=this; w2.show(); } 然后我关闭窗口1。 Window2.xaml.cs中的按钮单击方法 { w1Obj

我正在使用它将Window1的对象作为参照传递给Window2。然后,我关闭Window1,并尝试使用从Window2单击按钮来显示Window1。
我得到一个错误,这是经常可能与任何开发人员在wpf。错误是:无法在窗口关闭后设置可见性或呼叫显示、显示对话框。

Window1.xaml.cs中的按钮单击方法
{

window2w2=newwindow2();

w2.w1Obj=this;

w2.show();

}

然后我关闭窗口1。

Window2.xaml.cs中的按钮单击方法
{

w1Obj.testMethod();

this.w1Obj.show();

}



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

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

调用Window.Close()时:

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

窗口将从Application.Windows中删除(如果存在应用程序对象)

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

将引发关闭的事件

由窗口创建的非托管资源将被释放

如果调用ShowDialog来显示窗口,ShowDialog将返回

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


您可以在此处找到有关关闭事件的详细信息

嗯,看起来您正在关闭一个窗口,然后尝试调用该窗口上的show,但错误消息清楚地说明了这一点。但原因何在。?如果我可以执行该类的方法,那么我也可以显示该窗口。由于您持有对该类实例的引用,因此未处理该类实例,但在调用Close后,它不再是可以再次显示的工作窗体。窗口关闭不是我的问题。我关心的是执行了
testMethod()
,但show()方法会生成错误。为什么。?是在关闭窗口后,该对象也将从内存中删除。?
或者它是ios bcz。我有一个引用并使用它,我无法显示窗口。?TestMethod()工作正常,因为该对象仍然存在,Close()方法不会破坏它。但是,如果要在Close()之后调用Show()方法,则需要重新实例化窗口。