0

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

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"在我的“例外”列表中看到并且程序继续进行。为什么没有捕获到这个特定的异常?

4

2 回答 2

0

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

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

于 2009-10-24T18:37:56.600 回答
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

于 2009-11-19T12:27:15.280 回答