ThreadInterruptedException Class
The exception that is thrown when a Thread is interrupted while it is in a waiting state.
For a list of all members of this type, see ThreadInterruptedException Members.
System.Object
System.Exception
System.SystemException
System.Threading.ThreadInterruptedException
[Visual Basic] <Serializable> Public Class ThreadInterruptedException Inherits SystemException [C#] [Serializable] public class ThreadInterruptedException : SystemException [C++] [Serializable] public __gc class ThreadInterruptedException : public SystemException [JScript] public Serializable class ThreadInterruptedException extends SystemException
Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Remarks
After a thread is created, it is in one or more ThreadState states until it is destroyed. Calling Interrupt when a thread is in the WaitSleepJoin state will cause a ThreadInterruptedException to be thrown.
ThreadInterruptedException uses the HRESULT COR_E_THREADINTERRUPTED, which has the value 0x80131519.
For a list of initial property values for an instance of ThreadInterruptedException, see the ThreadInterruptedException constructors.
Example
[Visual Basic, C#, C++] The following code example shows the behavior of a running thread when it is interrupted and subsequently gets blocked.
[Visual Basic] Option Explicit Option Strict Imports System Imports System.Security.Permissions Imports System.Threading <Assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, _ ControlThread := True)> Public Class ThreadInterrupt Shared Sub Main() Dim stayAwake As New StayAwake() Dim newThread As New Thread(AddressOf stayAwake.ThreadMethod) newThread.Start() ' The following line causes an exception to be thrown ' in ThreadMethod if newThread is currently blocked ' or becomes blocked in the future. newThread.Interrupt() Console.WriteLine("Main thread calls Interrupt on newThread.") ' Tell newThread to go to sleep. stayAwake.SleepSwitch = True ' Wait for newThread to end. newThread.Join() End Sub End Class Public Class StayAwake Dim sleepSwitchValue As Boolean = False WriteOnly Property SleepSwitch As Boolean Set sleepSwitchValue = Value End Set End Property Sub New() End Sub Sub ThreadMethod() Console.WriteLine("newThread is executing ThreadMethod.") While Not sleepSwitchValue ' Use SpinWait instead of Sleep to demonstrate the ' effect of calling Interrupt on a running thread. Thread.SpinWait(10000000) End While Try Console.WriteLine("newThread going to sleep.") ' When newThread goes to sleep, it is immediately ' woken up by a ThreadInterruptedException. Thread.Sleep(Timeout.Infinite) Catch ex As ThreadInterruptedException Console.WriteLine("newThread cannot go to " & _ "sleep - interrupted by main thread.") End Try End Sub End Class [C#] using System; using System.Security.Permissions; using System.Threading; [assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, ControlThread = true)] class ThreadInterrupt { static void Main() { StayAwake stayAwake = new StayAwake(); Thread newThread = new Thread(new ThreadStart(stayAwake.ThreadMethod)); newThread.Start(); // The following line causes an exception to be thrown // in ThreadMethod if newThread is currently blocked // or becomes blocked in the future. newThread.Interrupt(); Console.WriteLine("Main thread calls Interrupt on newThread."); // Tell newThread to go to sleep. stayAwake.SleepSwitch = true; // Wait for newThread to end. newThread.Join(); } } class StayAwake { bool sleepSwitch = false; public bool SleepSwitch { set{ sleepSwitch = value; } } public StayAwake(){} public void ThreadMethod() { Console.WriteLine("newThread is executing ThreadMethod."); while(!sleepSwitch) { // Use SpinWait instead of Sleep to demonstrate the // effect of calling Interrupt on a running thread. Thread.SpinWait(10000000); } try { Console.WriteLine("newThread going to sleep."); // When newThread goes to sleep, it is immediately // woken up by a ThreadInterruptedException. Thread.Sleep(Timeout.Infinite); } catch(ThreadInterruptedException e) { Console.WriteLine("newThread cannot go to sleep - " + "interrupted by main thread."); } } } [C++] #using <mscorlib.dll> using namespace System; using namespace System::Security::Permissions; using namespace System::Threading; [assembly: SecurityPermissionAttribute(SecurityAction::RequestMinimum, ControlThread = true)]; __gc class StayAwake { bool sleepSwitch; public: __property void set_SleepSwitch(bool value) { sleepSwitch = value; } StayAwake(){sleepSwitch = false;} void ThreadMethod() { Console::WriteLine(S"newThread is executing ThreadMethod."); while(!sleepSwitch) { // Use SpinWait instead of Sleep to demonstrate the // effect of calling Interrupt on a running thread. Thread::SpinWait(10000000); } try { Console::WriteLine(S"newThread going to sleep."); // When newThread goes to sleep, it is immediately // woken up by a ThreadInterruptedException. Thread::Sleep(Timeout::Infinite); } catch(ThreadInterruptedException* e) { Console::WriteLine(S"newThread cannot go to sleep - " S"interrupted by main thread."); } } }; void main() { StayAwake* stayAwake = new StayAwake(); Thread* newThread = new Thread( new ThreadStart(stayAwake, &StayAwake::ThreadMethod)); newThread->Start(); // The following line causes an exception to be thrown // in ThreadMethod if newThread is currently blocked // or becomes blocked in the future. newThread->Interrupt(); Console::WriteLine(S"Main thread calls Interrupt on newThread."); // Then tell newThread to go to sleep. stayAwake->SleepSwitch = true; // Wait for newThread to end. newThread->Join(); }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Threading
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
Assembly: Mscorlib (in Mscorlib.dll)
See Also
ThreadInterruptedException Members | System.Threading Namespace | Thread | ThreadState | Pausing and Resuming Threads | Managed and Unmanaged Threading