WPF子窗口关闭后,无法再次打开

本文介绍了解决Windows应用程序中子窗口无法重新打开的问题。通过修改子窗口的关闭行为为隐藏,避免了对象销毁导致的错误。同时,为了确保主窗口关闭时整个程序能够正常退出,文章提供了手动结束进程的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子窗口的关闭和隐藏

关闭一个窗口之后,不能继续打开,出现如下错误:

System.InvalidOperationException: ‘Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed.’

原因:
关闭子窗口之后,子窗口对象被销毁了,如果不重新实例化一个新的子窗口对象,子窗口就不能重新打开了。

解决方法:
在子窗口添加如下函数,使子窗口隐藏,而不是直接关闭销毁。

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
    this.Visibility = Visibility.Hidden;
}

主窗口关闭后,还是调试状态,没有完全退出

把子窗体加上隐藏的函数之后,关闭主窗口之后,程序没有退出调试阶段,表明子窗口的线程还没有结束,使得进程没有结束。在主窗口添加如下代码,手动结束进程。

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
	System.Environment.Exit(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值