Timeout Class
Contains a constant used to specify an infinite amount of time. This class cannot be inherited.
For a list of all members of this type, see Timeout Members.
System.Object
System.Threading.Timeout
[Visual Basic] NotInheritable Public Class Timeout [C#] public sealed class Timeout [C++] public __gc __sealed class Timeout [JScript] public class Timeout
Thread Safety
This type is safe for multithreaded operations.
Remarks
Timeout is a constant used as a time interval by methods that suspend a Thread for a time period.
Example
[Visual Basic, C#, C++] The following code example shows a thread going to sleep for an infinite time and subsequently being woken up.
[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, .NET Compact Framework
Assembly: Mscorlib (in Mscorlib.dll)
See Also
Timeout Members | System.Threading Namespace | Thread | ReaderWriterLock