使用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方法後,線程仍然在執行。
