这是Winforms中的错误吗? (在 VS2008 和 VS2010 上都测试过)
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("Hey");
}
我在该代码中没有收到任何错误,不久前,我正在尝试为这个问题制定解决方案 Parse a number from a string with non-digits in between
我在 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字符串 t = s.ToCharArray().TakeWhile...
最佳答案
重写,我已经弄清楚它来自哪里。当 32 位进程在 64 位版本的 Windows 7 上运行时,在 32 位进程中引发异常时,Windows 行为不正常。它会吞下由响应由 64 位 Windows 管理器触发的 Windows 消息而运行的代码引发的任何异常.与 WM_SHOWWINDOW 类似,该消息会导致引发 Load 事件。
调试器发挥作用是因为当它处于事件状态时,Winforms 应用程序中的正常异常捕获将被关闭,以允许调试器在出现异常时停止。在这种情况下不会发生这种情况,因为 Windows 7 首先吞下异常,防止调试器看到它。
我在 this answer 中更广泛地描述了这个问题。 ,以及可能的解决方法。
关于winforms - 为什么表单加载无法捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209706/