为什么表单加载无法捕获异常?这是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首先吞下异常,阻止调试器看到它。
jeck猫
TA贡献1909条经验 获得超7个赞
它是按设计进行的(尽管极其愚蠢的设计,IMO)。您的异常是在展开堆栈期间遇到内核模式边界。如果可以,切换到其他一些事件,或者不要让异常逃脱; 如果你期望你的调试器在OnLoad上自动中断未处理的异常,这没有用。
繁星coding
TA贡献1797条经验 获得超4个赞
WinForms框架类不会自动捕获任何异常。这不是一个错误,它是设计 - 他们会做什么与例外?
您必须在任何情况下拥有自己的try / catch块,或者处理Application.ThreadException
事件。该事件对于某些通用处理代码(如记录异常或显示错误对话框)很有帮助,但显然它不能对任何单个事件或异常类型执行任何特定操作。
添加回答
举报
0/150
提交
取消