经过一系列对.NET Thread 的测试,有下列结论:
1. 正常情况的 ThreadAbortException 异常:
在主程序中 theThread.Abort() 后将引发线程中的 ThreadAbortException 异常。
根据 MSDN 对 ThreadAbortException 的描述,“ThreadAbortException 是一种可捕获的特殊异常”,在 catch 块的结尾处,既便不使用 throw 它仍将继续引发,这样可能经过所有上级 catch ,直至遇到 Thread.ResetAbort();
Thread.ResetAbort(); 取消为当前线程请求的 Abort(); 执行后 ThreadAbortException 不再继续引发。如果主程序再次调用 theThread.Abort(); ThreadAbortException 异常将再次引发。
2. Abort() 尚未 ResetAbort() 再次 Abort():
第二次 Abort() 不起作用。除非在第二次调用 Abort 前,已经执行了 ResetAbort();
3. 线程正进行于其它 finally 、catch 块中时:
线程将在处理 finally、catch 块之后引发 ThreadAbortException 异常。
4. 线程中在进行 Thread.Sleep(n); 时在线程外 Abort() 将会立即引发 ThreadAbortException 异常。