怪异的StackOverflowException异常

简介:

前两天,在做一个小软件时碰到一个怪异的StackOverflowException异常,试了几次后还是百思不得其解。

当时我想做的功能很简单:我想在程序开始启动时和在窗口被最小化后,自动隐藏掉窗口。

 

场景重现

打开VS2010或VS2008,建立一个新的应用程序项目,VS会自动帮我们建立一个Form1窗口文件,回到代码编辑窗口,会看到如下的代码:

 

复制代码
     public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
        }
    }
复制代码

 

 

好,现在加上我们需要的代码实现在窗体最小化时自动隐藏掉窗体:

代码

 

F5运行,程序正常,可达到我们想要的效果。。OK,现在问题来了:因为我还需要在程序一启动时也自动隐藏掉。所以我就写了以下这句代码:

 

代码

 

 

即加了上面代码中红色的那句代码,代码看起来是正常的,可是F5运行,VS却提示我这样的错误:

怪事了,怎么出现堆栈溢出了呢?!难道那个Form1_SizeChanged函数出现递归调用了?调试运行,却发现根本没有递归调用。那问题出现在哪里呢?

经N次的测试检查,发现导致出现这个异常的语句是“this.ShowInTaskbar = false;”,有点怪异!!将这条语句删除或注释后,程序运行良好,但是窗体却在任务栏里出现了。如果单单这样,那问题还好解决,但更怪异的事情却来了,因为我调试时顺手写了这样的代码:

 

代码

 

即增加了上面的红色语句,按F5运行,天!程序正常运行,异常没有发生?!!

这。。这究竟是怎么一回事?我也不懂了。。。望哪位兄弟能帮我解答一下?在此多谢先了!

 

注:

上面的异常解决方法还可以换一种方法,即在Load事件里处理,也是不会发生异常,如下代码:

 

代码

 

 

示例项目代码下载:

/Files/kingthy/BugTest.rar


本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2010/12/31/1923303.html,如需转载请自行联系原作者

相关文章
|
8月前
|
JSON JavaScript 前端开发
抓住异常,解救你的代码世界:你应该了解的 JavaScript 异常类型
抓住异常,解救你的代码世界:你应该了解的 JavaScript 异常类型
|
8月前
|
Java
Java异常处理:解释一下异常的传播机制。
Java异常处理:解释一下异常的传播机制。
132 1
面试时通常让你默写的运行时异常与编译时异常举例
面试时通常让你默写的运行时异常与编译时异常举例
|
关系型数据库 MySQL API
被无视的小细节
被无视的小细节
82 0
|
存储 Java 编译器
【重学C/C++系列(四)】:函数体hack过程详解
首先来说下**什么是hack**? hack字面意思“**非法入侵**”,那么在C/C++中其实就是**使用反汇编查看C/C++代码对应的汇编代码**
【重学C/C++系列(四)】:函数体hack过程详解
|
Java 编译器 数据库
Java面向对象——异常
Java面向对象——异常
125 0
Java面向对象——异常
C#(二十六)之C#异常
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
130 0
C#(二十六)之C#异常
|
JavaScript 前端开发 开发者
JavaScript基础之五——异常的抛出与捕获
JavaScript基础之五——异常的抛出与捕获
133 0
|
Java
Java面向对象中的异常
Java中的异常和错误Java 中的异常机制,更好地提升程序的健壮性 throwable 为顶级, Error 和 Exception Error :虚拟机错误,内存溢出,线程死锁 Exception : RuntimeException 为空指针异常,数组下标越界异常,算数异常,类型转换异常等,IO异常( IOException ),SQL异常( SQLException )。
745 0