Thread.ResetAbort()
using System; using System.Threading; class MyThread { public Thread thrd; public MyThread(string name) { thrd = new Thread(this.run); thrd.Name = name; thrd.Start(); } void run() { Console.WriteLine(thrd.Name + " starting."); for(int i = 1; i <= 100; i++) { try { Console.Write(i + " "); Thread.Sleep(50); } catch(ThreadAbortException exc) { if((int)exc.ExceptionState == 0) { Console.WriteLine("Abort Cancelled! Code is " + exc.ExceptionState); Thread.ResetAbort(); } else Console.WriteLine("Thread aborting, code is " + exc.ExceptionState); } } Console.WriteLine(thrd.Name + " exiting normally."); } } class MainClass { public static void Main() { MyThread mt1 = new MyThread("My Thread"); Thread.Sleep(1000); Console.WriteLine("Stopping thread."); mt1.thrd.Abort(100); mt1.thrd.Join(); Console.WriteLine("Main thread terminating."); } }