A Thread class is responsible for creating and managing a thread in multi-thread programming. It provides a method known as ResetAbort which is responsible for canceling the abort request of the current thread. It prevents the ThreadAbortException from terminating the thread.
Syntax:
public static void ResetAbort ();
Exceptions:
- ThreadStateException : If the Abort was not invoked on the current thread.
- SecurityException : If the caller does not have the required security permission for the current thread.
Below programs illustrate the use of ResetAbort() method:
Example 1:
using System;
using System.Threading;
using System.Security.Permissions;
class MyThread {
public void Job()
{
try {
for ( int I = 0; I < 10; I++)
{
Console.WriteLine( " My Thread is working..!" );
Thread.Sleep(100);
}
}
catch (ThreadAbortException e)
{
Console.WriteLine( "Caught ThreadAbortException and reset" );
Console.WriteLine( "Ex message: {0}" , e.Message);
Thread.ResetAbort();
}
Console.WriteLine( "Thread is alive and working..!" );
Thread.Sleep(2000);
Console.WriteLine( "Thread is finished its working..!" );
}
}
class GFG {
public static void Main()
{
MyThread obj = new MyThread();
Thread T = new Thread(obj.Job);
T.Start();
Thread.Sleep(100);
Console.WriteLine( "Aborting thread" );
T.Abort();
T.Join();
Console.WriteLine( "Main thread ends" );
}
}
|
Output:
My Thread is working..!
Aborting thread
Caught ThreadAbortException and reset
Ex message: Thread was being aborted.
Thread is alive and working..!
Thread is finished its working..!
Main thread ends
Example 2:
using System;
using System.Threading;
public class GFG {
public static void Main()
{
Thread thr = new Thread(Job);
thr.Start();
Thread.ResetAbort();
}
public static void Job()
{
Console.WriteLine( "Hello" );
}
}
|
Runtime Error:
Unhandled Exception:
System.Threading.ThreadStateException: Unable to reset abort because no abort was requested.
Reference: