C# 为什么Form_Load事件已经捕获了所有异常?
我把我的初始化代码放在表单加载中,因为把它留在构造函数中不是一个好主意,因为设计器可能会崩溃 问题是我刚刚意识到表单加载事件中的任何异常都将在内部捕获 为什么??我应该如何克服这一点C# 为什么Form_Load事件已经捕获了所有异常?,c#,winforms,exception,C#,Winforms,Exception,我把我的初始化代码放在表单加载中,因为把它留在构造函数中不是一个好主意,因为设计器可能会崩溃 问题是我刚刚意识到表单加载事件中的任何异常都将在内部捕获 为什么??我应该如何克服这一点 private void Form1_Load(object sender, EventArgs e) { //This exception will be catch internally (I don't know why and where) throw new
private void Form1_Load(object sender, EventArgs e)
{
//This exception will be catch internally (I don't know why and where)
throw new Exception("test");
}
这是一个bug,在这里解释如下: 在x64中,OnLoad异常消失的情况–用户模式回调异常 VS团队回答: 从这里开始: 由Microsoft@22/04/2010 17:12发布 你好, 此错误被关闭为“外部”,因为此行为是x64版本的Windows处理异常的结果。当用户模式异常跨越内核转换时,x64版本的Windows不允许该异常传播。因此,附加的调试程序不知道发生异常导致调试器未能中断未处理的异常 不幸的是,VisualStudio团队对此无能为力,这是操作系统设计的结果。有关此问题的所有反馈都应提交给Windows团队;然而,Windows团队认为这是“正确的”操作系统设计,并认为x86行为“不正确” 致以最良好的祝愿, Visual Studio调试器
我正在使用的解决方案: 我把表单加载中的代码放到构造函数中,检查应用程序是否在designer中运行
protected static bool IsInDesigner
{
get { return (Assembly.GetEntryAssembly() == null); }
}
if (!MainForm.IsInDesigner)
LoadControl();
是的,Im使用win 7 x64可能会重复,但解决方案配置为x86。有人能在x86系统上测试一下吗?你说得对。这是一个bug,这里有解释:如果你想检查你是否在设计器中执行,你可以只检查
LicenseManager.UsageMode
和Componet.DesignMode
谢谢,我认为这两个检查都可以,但我的版本只需要一行代码。