【发布时间】:2009-10-17 22:11:25
【问题描述】:
在 winforms 应用中,在表单的 Load 事件中,添加以下行:
throw new Exception();
并运行应用程序。它运行没有问题。这称为静默失败,您可以尝试在前后添加消息框,您很快就会发现 throw 语句并没有让应用程序崩溃,而是从 Load 事件中退出。
我确信没有必要解释这是多么丑陋和危险。
我仍然想知道这种可怕行为背后的(可能是历史)原因。 我敢肯定这不是一个设计决定,可能是没有选择,或者是懒惰。有人知道吗?
如果有人能指出可能导致 seilent 失败的事件列表,我会很高兴。
这是我的代码的 sn-p - 我不知道它有什么帮助 - 但是,这里是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Form f = new Form();
f.Load += new EventHandler((x, y) => { throw new Exception(); });
Application.Run(f);
}
}
}
编辑 似乎它并没有发生在每个人身上。 我用的是:fw 3.5, winforms, vs 2008, vista x64, new clean project of winforms,上面的代码。
【问题讨论】:
-
您能否进一步解释您的表单的 OnLoad 事件处理程序中的 sn-p 问题。此外,您在此应用程序域中是否有 UnhandledException 处理程序?如果这是应用程序的主要形式,并且由于您引发了未处理的异常而无法加载,您期望会发生什么?我怀疑在这种情况下会调用您未处理的事件处理程序。
-
你用的是什么版本的windows?
-
我实际上再次否决了你之前的问题,它写得不好而且傲慢......
标签: c# winforms 64-bit exception