为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么表单加载无法捕获异常?

请问为什么表单加载无法捕获异常?

Qyouu 2019-09-05 12:05:11
为什么表单加载无法捕获异常?这是Winforms中的错误吗?(在VS2008和VS2010上测试)private void Form1_Load(object sender, EventArgs e){     throw new Exception("Hey");            }我没有在那段代码中收到任何错误,前一段时间,我正在尝试为这个问题制定解决方案从一个字符串中解析一个数字,其中包含非数字我在Form1_Load中执行此代码:private void Form1_Load(object sender, EventArgs e){     MessageBox.Show("X");     string s = "12ACD";     string t = s.ToCharArray().TakeWhile(c => char.IsDigit(c)).ToArray().ToString();     MessageBox.Show("Y");     int n = int.Parse(t);     MessageBox.Show(n.ToString());        }我想知道为什么它没有显示数字。然后将代码移动到button1_Click ...private void button1_Click(object sender, EventArgs e){     MessageBox.Show("X");     string s = "12ACD";     string t = s.ToCharArray().TakeWhile(c => char.IsDigit(c)).ToArray().ToString();     MessageBox.Show("Y");     int n = int.Parse(t);     MessageBox.Show(n.ToString());        }...然后我注意到有一个错误:输入字符串的格式不正确。为什么Form1_Load没有捕获任何异常,为什么它会默默地失败?代码刚刚退出form1_load at string t = s.ToCharArray()。TakeWhile ...
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

重写,我已经弄清楚它来自哪里。Windows在64位版本的Windows 7上运行时,如果在32位进程中引发异常,Windows会出现异常。它会吞下由响应由64位Windows管理器触发的Windows消息而运行的代码引发的任何异常。与WM_SHOWWINDOW一样,导致Load事件被引发的消息。

调试器起作用,因为当它处于活动状态时,Winforms应用程序中的正常异常捕获被关闭以允许调试器停止异常。在这种情况下不会发生这种情况,因为Windows 7首先吞下异常,阻止调试器看到它。




查看完整回答
反对 回复 2019-09-07
?
jeck猫

TA贡献1909条经验 获得超7个赞

它是按设计进行的(尽管极其愚蠢的设计,IMO)。您的异常是在展开堆栈期间遇到内核模式边界。如果可以,切换到其他一些事件,或者不要让异常逃脱; 如果你期望你的调试器在OnLoad上自动中断未处理的异常,这没有用。

查看完整回答
反对 回复 2019-09-07
?
繁星coding

TA贡献1797条经验 获得超4个赞

WinForms框架类不会自动捕获任何异常。这不是一个错误,它是设计 - 他们会做什么与例外?

您必须在任何情况下拥有自己的try / catch块,或者处理Application.ThreadException事件。该事件对于某些通用处理代码(如记录异常或显示错误对话框)很有帮助,但显然它不能对任何单个事件或异常类型执行任何特定操作。


查看完整回答
反对 回复 2019-09-07
  • 3 回答
  • 0 关注
  • 390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信