If the thread is required to be destroyed, the thread.Abort ( ) method will allow you to accomplish the task. The runtime aborts the thread by throwing a ThreadAbortException. This exception cannot be caught. The finally block is present in the method; the runtime will send the control to it.
Following example is destroy threads:
public static void ChildThreadCall()
Console.WriteLine("Child thread started:");
Console.WriteLine("Child thread - counting to 10:");
for (int i = 0; i <= 10; i++)
Console.WriteLine("Child thread finished:");
catch (ThreadAbortException )
Console.WriteLine("Child thread -unable to catch the exception:");
public static void Main()
ThreadStart ChildRef = new ThreadStart(ChildThreadCall);
Console.WriteLine("Main - Creating Child thread:");
Thread ChildThread = new Thread(ChildRef);
//Give the Child thread time to start.
Console.WriteLine("Main - Sleeping for 2 seconds:");
Console.WriteLine("\nMain - Aborting Child thread:");
Output is shows below:
Note: - The Main ( ) Method pauses for two seconds to make sure that the runtime has had time to start the worker thread. When started, the worker thread starts counting to ten, pausing for a second in between each number. When the Main ( ) method resumes execution after its two-second pause, it aborts the worker thread. Notice, the finally block is executed after the abort.