Why win32 exception are not caught by c# exception handling mechanism

c#, exception, winforms

Solution

EDIT : as Pratik pointed out, the following answer applies to .NET 1.0 and .NET 1.1 only. Starting with .NET 2.0, non-CLS exception should be caught as a RuntimeWrappedException.

Because Win32 exceptions do not derive from the .NET Exception class. Try :

try {
} catch (Exception ex) {
    // .NET exception
} catch {
    // native exception
}

See Catch non-CLSCompliant exceptions in general handlers for more information.

Problem

I have a winforms application.Winforms start with Program.cs where we have main() defined.I have put this code in try-catch block. ``` [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()); } } } ``` Whenever there is a win32 exception,this mechanism fails and unhandled exception message is thrown and application crashes. I have 2 questions regarding this code: 1) Why win32 exceptions are not caught. 2) Is it a good practice to catch exceptions at the highest level.

Original source