c#中窗体的close、dispose的区别及分析

一个小程序,初始运行正常,当实际使用时,突然发现程序运行一段时间后,会自动的弹出一个系统中的messagebox。我想当然的认为是病毒在作怪吗?把程序安装到其他电脑上,故障依然,可以肯定是代码的事了。

仔细观察代码、故障现象后,发现是窗体在close后,窗体中的timer控件依然工作,我在timer控件到达指定的时间(10分钟)后,就会弹出故障中出现的messagebox。

处理:如果想关闭showdialog出的窗体,应使用dispose方法,然后将窗体变量赋值null。即使不对窗体变量赋值null,timer控件在dispose后也不会工作。问题得以解决。

以下摘自CSDN 解释

1、当通过ShowDialog方法来显示一个模态窗体时:调用该窗体的Close方法后,只是隐藏了该窗体,仍然可以访问该窗体,并可以取得该窗体上控件的值,而且还可以通过ShowDialog方法重新显示该窗体。当调用该窗体的Dispose方法时,等于释放了该窗体所占有的资源,但该对象任然存在,可以访问该窗体,也可以取得窗体上控件的值,但是不能再通过ShowDialog方法重新显示该窗体。
2、当通过Show方法来显示一个非模态窗体时,情况就简单许多,因为Close方法和Dispose方法是一样的,他们都调用了带一个参数的Dispose方法。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值