Using ResetAbort()
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Using ResetAbort(). using System; using System.Threading; class MyThread { public Thread thrd; public MyThread(string name) { thrd = new Thread(new ThreadStart(this.run)); thrd.Name = name; thrd.Start(); } // This is the entry point for thread. void run() { Console.WriteLine(thrd.Name + " starting."); for(int i = 1; i <= 1000; i++) { try { Console.Write(i + " "); if((i%10)==0) { Console.WriteLine(); Thread.Sleep(250); } } 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."); } } public class ResetAbort { public static void Main() { MyThread mt1 = new MyThread("My Thread"); Thread.Sleep(1000); // let child thread start executing Console.WriteLine("Stopping thread."); mt1.thrd.Abort(0); // this won't stop the thread Thread.Sleep(1000); // let child execute a bit longer Console.WriteLine("Stopping thread."); mt1.thrd.Abort(100); // this will stop the thread mt1.thrd.Join(); // wait for thread to terminate Console.WriteLine("Main thread terminating."); } }