繁体   English   中英

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

[英]WinForms - why aren't my exceptions caught?

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

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

被调用的方法将异常写入列表,因此我可以轻松修复它。 但是今天我来了,看到VS引发了NullReference exception ,我不知道为什么没有捕获到它?

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

stream = null;
stream.Flush();

该程序的确跳到了异常捕获范围,但它停留在Flush行上。 任何其他异常都可以很好地处理..也许是因为尚未实现此方法?

我确定在“例外”列表中看到"Object reference not set to an instance of object" ,并且程序继续运行。 为什么未捕获到此特殊异常?

为了回答您的问题,我们需要有关抛出的错误的更多信息。 它是否源于您的代码? 让我们看看堆栈跟踪。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM