使用Abort方法可以中止線程,而使用ResetAbort方法可以取消中止線程的操作。
下面的實例演示了Abort和ResetAbort方法的使用。
using System; using System.Threading; namespace AbortAndResetabortExp { class Program { static void Main(string[] args) { Thread t = new Thread(DoWork); t.Name = "八戒"; t.Start(); Thread.Sleep(10000); Console.WriteLine("悟空:八戒,該起床了"); t.Abort(); } static void DoWork() { try { while (true) { Console.WriteLine(Thread.CurrentThread.Name + ":呼呼~~~~~"); Thread.Sleep(1000); } } catch (ThreadAbortException e) { Console.WriteLine(Thread.CurrentThread.Name + ":還早呢,我還要再睡會"); Thread.ResetAbort(); } for (int i = 0; i < 10; i++) { Console.WriteLine(Thread.CurrentThread.Name + ":呼呼~~~~~"); Thread.Sleep(1000); } } } }
實例中,主線程啟動“八戒”線程,使其“呼呼”睡覺。10秒鐘後,主線程通過調用“八戒”線程的Abort方法中止“八戒”線程,“八戒”線程的Abort方法被調用後會觸發ThreadAbortException異常,“八戒”線程捕獲到該異常後,使用ResetAbort方法取消中止線程的操作,因為他還沒有睡夠呢。
整個程序的執行結果如下圖所示,從結果中可以看出,調用ResetAbort方法後,線程仍然在執行。