为什么win32异常没有被c#异常处理机制捕获

Roh*_*nsi 14 c# exception-handling winforms

我有一个winforms application.Winforms开始于Program.cs我们有main()定义.我已将此代码放在try-catch块中.

 [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmSplash());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            if (ex.InnerException != null)
            {
                MessageBox.Show(ex.InnerException.ToString());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

只要有win32异常,此机制就会失败,并且抛出未处理的异常消息并且应用程序崩溃.
关于此代码我有2个问题:

1)为什么没有抓住win32异常.

2)在最高级别捕获异常是一种好的做法.

Mac*_*Mac 15

编辑:正如Pratik所指出的,以下答案仅适用于.NET 1.0和.NET 1.1.从.NET 2.0开始,非CLS异常应作为RuntimeWrappedException捕获.


因为Win32异常不是从.NET Exception类派生的.试试:

try {
} catch (Exception ex) {
    // .NET exception
} catch {
    // native exception
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅常规处理程序中的Catch non-CLSCompliant异常.

  • 默认情况下,.Net 2.0中不需要这样做.所有非CLS异常都被视为RuntimeWrappedException.请参阅http://msdn.microsoft.com/en-us/library/ms404228.aspx (4认同)