wpf中重写OnClosing窗口关闭事件报错

在WPF中,重写OnClosing事件时遇到错误。使用`base.OnClosing(e)`代替`this.Close()`能解决问题。当`MessageBox.Show`弹出模态窗口后,点击确定时,原窗口已关闭,导致报错。使用基类方法避免了该问题。

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

贴代码

  protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
            {
            
            //base.OnClosing(e);
            if (System.Windows.Forms.MessageBox.Show("确定是否关闭当前应用程序?", "提示", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                this.Close();  //重写父类的onClosing事件,通过this.closing关闭报错,
               }
            else
                {
                e.Cancel = true;
                this.Hide();
                }
           
            }

解决这个问题就是用base.Onclosing(e)代替 this.close()   用基类base关键词引用来关闭窗口,问题解决。


问题分析:(个人理解不一定准确,以供未来参考)system.windows.forms.messagebox.show() 弹出的是一个模态窗口,阻塞了当前的线程,当点击确定按钮时,模态窗口关闭(或隐藏回收),当前的this仍然引用的是已经消失的模态窗口,所以报错.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值