关于windform中show()后窗口关闭的问题

      一直没有在博客完上写过东西,今天开博,记录下遇到的问题及解决方法,供以后回顾参考....
      前一阵子,在公司的一个项目中遇到这样一个问题:程序是winform程序,在程序中对于错误的提示进行了统一封装,并且用类似于msn的信息提示方式把错误及其他提示信息显示出来,然后在弹出的Pop窗口中设置一个定时器,来关闭提示窗口.这种实现在一般的情况下没有什么问题,但是在另外情况下就出现问题了.例如:在主程序的基础上在通过模式的ShowDialog弹出窗口,此时恰好在弹出窗口上进行某项操作之后,报错了,提示窗口也弹出来了.等到提示窗口关闭之后,原先弹出窗口也一同被关闭了.有时这种情况出现也影响不大,但是客户是上帝,上帝提出来说不行,那我们就得改.当然这种错误出现也是不允许的.于是,调试程序发现,当弹出的提示窗口自动关闭时,原先ShowDialog出来的窗口的DialogResult变为Cancel了,所以关闭掉了.但是,为什么会造成这种情况呢?一时半会也没有找出原因来....
       一时没有找出来原因,于是把弹出消息窗口改进了一下,对弹出消息窗口使用单件模式,构造唯一实例,然后在定时器事件里面把窗口Hide()掉,下次再要显示消息时再Show()出来,定时器重置也可以达到相同的效果.虽然这样是解决掉了上面提出的问题,但是这样实现会出现一个新的问题.本来弹出的消息窗口有一个渐变效果是放在shown事件里面,有一些初始化工作放在load事件里面,这样一来重新show()出窗口时渐变效果和一些初始化工作不好处理,也增加了代码量.思量一番,还是回头解决之前窗口一同关闭的问题.再一次仔细调试一下代码,发现是在调用this.Close()之后,调用垃圾回收方法,代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
1 protected override void Dispose(bool disposing)
2ExpandedBlockStart.gifContractedBlock.gif        {
3            if (disposing && (components != null))
4ExpandedSubBlockStart.gifContractedSubBlock.gif            {
5                components.Dispose();
6            }

7            base.Dispose(disposing);
8        }

方法调用了base.Dispose(disposing)引起的,找到原因,解决起来就方便了,于是把这一句注掉,解决.
     

转载于:https://www.cnblogs.com/waterfrost/articles/1539920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值