使用Abort方法可以中止线程,而使用ResetAbort方法可以取消中止线程的操作。
下面的实例演示了Abort和ResetAbort方法的使用。
<span style="font-size:14px;">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); } } }}</span>
实例中,主线程启动“八戒”线程,使其“呼呼”睡觉。10秒钟后,主线程通过调用“八戒”线程的Abort方法中止“八戒”线程,“八戒”线程的Abort方法被调用后会触发ThreadAbortException异常,“八戒”线程捕获到该异常后,使用ResetAbort方法取消中止线程的操作,因为他还没有睡够呢。
整个程序的执行结果如下图所示,从结果中可以看出,调用ResetAbort方法后,线程仍然在执行。