我有一个
winforms应用程序.
Winforms从我们有main()定义的Program.cs开始.我把这个代码放在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());
}
}
}
每当有一个win32异常时,这个机制就会失败,抛出异常消息并且应用程序崩溃.
我有两个有关此代码的问题:
1)为什么win32异常没有被捕获.
2)在最高级别捕获例外是一个很好的做法.
编辑:正如
Pratik指出的,以下答案仅适用于.NET 1.0和.NET 1.1.从.NET 2.0开始,非CLS异常应该被捕获为
RuntimeWrappedException.
因为Win32异常不是从.NET Exception类派生的.尝试:
try {
} catch (Exception ex) {
// .NET exception
} catch {
// native exception
}
有关详细信息,请参阅Catch non-CLSCompliant exceptions in general handlers.