在我的多线程服务器中,我使用以下代码(在运行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"
,程序仍在继续。为什么不抓住这个特殊的例外?
答案 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
}
}
}
谢谢,