在A.DLL中有两个DLL,A和B,有一个这样的表单类:
namespace AAA
public class AForm: Form
{
...
private void btnOK_Click(object sender, EventArgs e)
{
DoSomeSth();
}
}
在B.DLL中,有一些像这样的代码
try
{
AForm dlg = new AAA.AForm();
dlg.ShowDialog();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
单击“确定”按钮后, DoSomeSth 功能会出现异常 当我使用vs2005调试代码时,可以在B.DLL中捕获异常,但是如果我在没有调试的情况下直接运行应用程序,则不会在B.DLL中捕获该异常,这是什么原因?
答案 0 :(得分:3)
这是known issue。根据知识库文章:
运行Windows窗体时 不使用的应用程序 调试器,你使用 要捕获的 NativeWindow.CallBack 方法 例外并防止 程序意外退出 (崩溃)。在里面 NativeWindow.CallBack 方法,你 填充异常消息 使用标准异常对话框。
但是,如果您运行Windows窗体 使用调试器的应用程序 因为你没有抓住异常 使用 的 NativeWindow.DebuggableCallBack 强> 方法。当你使用 的 NativeWindow.DebuggableCallBack 强> 方法,即时(JIT) 调试器停止应用程序 运行