相关疑难解决方法(0)

VS2010不会在64位版本的Windows上的WinForms应用程序中显示未处理的异常消息

当我创建一个新项目时,我对未处理的异常会有一个奇怪的行为.这就是我可以重现问题的方法:

1)创建一个新的Windows窗体应用程序(C#,. NET Framework 4,VS2010)

2)将以下代码添加到Form1_Load处理程序:

int vara = 5, varb = 0;
int varc = vara / varb;
int vard = 7;
Run Code Online (Sandbox Code Playgroud)

我希望VS中断并在第二行显示未处理的异常消息.但是,会发生的是第三行只是跳过而没有任何消息,应用程序一直在运行.

我现有的C#项目没有这个问题.所以我想我的新项目是用一些奇怪的默认设置创建的.

有没有人知道我的项目有什么问题?

我试过检查Debug-> Exceptions中的方框.但即使我在try-catch块中处理异常,执行也会中断; 这也不是我想要的.如果我没记错的话,在这个对话框中有一个名为"未处理的异常"的列或者类似的东西,这会让我感到非常兴奋.但在我的项目中只有一列("Thrown").

c# exception-handling visual-studio-2010

76
推荐指数
2
解决办法
2万
查看次数

C#中的无声失败,看似未处理的异常不会导致程序崩溃

在winforms应用程序中,在表单的Load事件中,添加以下行:

throw new Exception();
Run Code Online (Sandbox Code Playgroud)

并运行该应用程序.它运行没有问题.这称为静默失败,您可以尝试在之前和之后添加消息框,并且您很快就会发现,而不是崩溃应用程序,throw语句只是从Load事件中退出.

我确信没有必要解释这是多么丑陋和危险.

尽管如此,我仍然想知道这种可怕行为背后的原因(可能是历史).我敢肯定这不是一个设计决定,可能是没有选择,或懒惰.有人知道吗?

如果有人能指出我可能导致安静失败的事件清单,那将会很高兴.

这是我的代码片段 - 我不知道它可能会有什么帮助 - 但是,这里是:

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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

编辑 它似乎不会发生在每个人身上.我使用:fw 3.5,winforms,vs 2008,vista x64,winforms的新干净项目,上面提到的代码.

c# 64-bit exception winforms

40
推荐指数
1
解决办法
6693
查看次数