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