我有一个奇怪的问题,如果有人能提供帮助,我将不胜感激。
我有以下功能:
void Foo()
{
MessageBox.Show("here");
throw new Exception();
}
我在以下两种情况下调用它(分别 - 不是同时):
private void Form2_Load(object sender, EventArgs e)
{
// Case 1
Foo();
}
public Form2()
{
InitializeComponent();
// Case 2
Foo();
}
在这两种情况下我都可以看到消息框(我在“此处”收到消息)但是:
[案例 1] 应用程序没有因异常而中断(在 Debug模式下)并保持沉默!
[案例 2] 应用程序正确中断,我可以看到 Foo() 中存在异常。
知道为什么吗?
最佳答案
我的猜测是对构造函数的调用看起来有点像这样:
Form2 form = new Form2();
Application.Run(form);
关键部分是您直接调用 Form2
的构造函数,而调用 Form2_Load
的是应用程序类/消息泵。
最后一个难题是,在 Win32 消息泵中抛出的异常的处理方式不同(首先请参阅 Application.SetUnhandledExceptionMode Method )- 您可能还会感到困惑的是,根据项目是否不同,异常处理方式也不同是否在调试配置中构建。
您可能有一个 Application.UnhandledException Event 的处理程序- 这将解释您所描述的行为。
关于c# Windows 窗体应用程序异常未抛出!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536973/