使用winforms和C#在ResumeLayout()上静默崩溃Win7 64bit

时间:2011-04-24 05:49:22

标签: c# winforms exception

我正在用C#构建一个Windows窗体应用程序,并且在Windows 7 64bit上进行的测试显示出一个无声的崩溃。

它失败的确切行是this.ResumeLayout(false);函数末尾附近的InitializeComponent()。它是Visual Studio生成的Forms Designer代码的一部分。

没有例外,没有弹出窗口显示程序已崩溃,没有。只要它击中该线,它就会停止运行。这仅发生在64位。删除该行,程序运行,但无法最大化,还有其他几个与窗口属性相关的奇怪。

我已尝试过从更改构建设置到使用 CorFlags.exe 的所有内容,没有任何帮助。可能是什么问题?

如果它有所作为,我正在使用OpenTK和GL控件。

4 个答案:

答案 0 :(得分:1)

有一个相同的问题,只有在我的情况下,软件在某些64位系统上运行而在其他系统上运行。例如,我的笔记本电脑是今年刚购买的vaio pcg系列。 64位Windows 7家庭版,1600 x 900分辨率。程序在这里运行得很好。我的同事有一个vaio svz系列,64位Windows专业版,分辨率为1920 x 1080,出于某种原因,他一直在ResumeLayout(false)电话上无声崩溃。

再一次,在this->SuspendLayout()子站顶部附近发出INitializeComponents()来电,并在底部附近发出this->ResumeLayout(false)来电解决了问题,该程序似乎在两者上运行良好系统现在。

答案 1 :(得分:1)

我和ResumeLayout()有同样的问题。它在几台机器上运行良好,但我有一个用户抛出它“调用目标引发了异常。”不是很有帮助。不幸的是,他们还隐藏了Exception.StackTrace中的一些细节。我咨询了我们的常驻专家,他认为这是一个调整大小的问题。我在去DEBUG之后发现了问题的确切位置 - > Exceptions并选择了所有内容。然后我在我用来重新定位一些复选框的函数里面休息了一下。出于某种原因,这会在这个用户的盒子上抛出超出范围的例外......

Rectangle rect = dataGridView.GetCellDisplayRectangle(col,row,true);

关键是如我所描述的那样选择例外选项中断帮助我查明实际问题。其他人提到的解决方法很好,但在这种情况下,我找到了根本原因。

答案 2 :(得分:0)

您是否使用了一些外部组件? 有些OCX与64bit不兼容?我在使用GdPicture时遇到了同样的麻烦。 如果是这样,尝试编译为32位,问题可以解决。

答案 3 :(得分:0)

对这整个考验的简单解决方案是在InitializeComponent()函数的开头简单地删除有问题的ResumeLayout()调用及其相应的SuspendLayout()调用。尽管窗口上有大量的控件,但它似乎对窗口的布局没有任何不良影响。同样,这仅适用于64位计算机,问题从未出现在Windows XP或7位32位上。

我仍然感到困惑的是为什么ResumeLayout()调用首先导致了一个无声崩溃,并且仍然对“解决方案”感到有些不安,但它似乎有效。

相关问题