我有一个非常简单的线程。Thread 对象所做的唯一事情是throw new Exception();
. 我这样做的原因是因为我需要测试如果在我的应用程序的单独线程中发生异常会发生什么。我已经用“真正的”运行时异常对此进行了测试,我的问题是一样的。
在调用线程之前我要做的是:
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
Application.Current.DispatcherUnhandledException += CurrentOnDispatcherUnhandledException;
//To handle exceptions in another thread
private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
//Do nothing ignore exception
}
//To handle all exceptions in main thread
private static void CurrentOnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs dispatcherUnhandledExceptionEventArgs)
{
dispatcherUnhandledExceptionEventArgs.Handled = true;
}
当该线程确实抛出异常时,它首先会按CurrentDomainOnUnhandledException
应有的方式命中,然后不会命中CurrentOnDispatcherUnhandledException
。在CurrentDomainOnUnhandledException
堆栈之后立即返回到抛出异常并再次抛出异常的线程,执行同一行。它永远不会停止这样做。这基本上是一个永无止境的循环,我不知道为什么。
UnhandledExceptionEventArgs 没有要设置的属性,也就是说我们已经处理了异常,我很确定这是问题的一部分。
我在做什么错,如何在这个线程中捕获这个 UnhandledException,并让线程继续执行(首选)或中止/杀死线程(不是首选),以便它不会继续执行 throw new exception 行。
我已经通过调试和发布对此进行了测试(确保发布的调试信息设置为无),这仍然发生在两个版本中,异常继续一遍又一遍地发生。
在此先感谢,我很困惑,不知道为什么会这样。