WinForms - 为什么我的异常没有被捕获?

时间:2009-10-24 18:20:23

标签: c# winforms exception unhandled-exception

在我的多线程服务器中,我使用以下代码(在运行Form本身或课程之前)

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ApplicationThreadException);

被调用的方法将异常写入列表,以便我可以轻松修复它。但今天我来了,看到VS抛出了NullReference exception,我不知道为什么没有被抓住?

我可以通过调用来重现它:

stream = null;
stream.Flush();

该程序会跳转到异常捕获范围,但它仍保留在Flush line..strange上。任何其他异常都处理得很好。可能因为这个方法还没有实现呢?

我确定我在“例外”列表中看到了"Object reference not set to an instance of object",程序仍在继续。为什么不抓住这个特殊的例外?

2 个答案:

答案 0 :(得分:0)

要回答您的问题,我们需要有关所引发错误的更多信息。它来自您的代码吗?让我们看看堆栈跟踪。

此外,如果在设置ThreadException之前调用Application.Run(...),它将不会捕获任何异常。

答案 1 :(得分:0)

我们使用以下代码并发现它运作良好: -

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
            //Handle exception
        }

    }
}

谢谢,

菲尔 http://exceptioneer.com