.NET Framework Class Library
Timeout Class
Contains a constant used to specify an infinite amount of time. This class cannot be inherited.
Inheritance Hierarchy
System.Object
System.Threading.Timeout
Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)
Syntax
Visual Basic
<ComVisibleAttribute(True)> _ Public NotInheritable Class Timeout
C#
[ComVisibleAttribute(true)] public static class Timeout
Visual C++
[ComVisibleAttribute(true)] public ref class Timeout abstract sealed
F#
[<AbstractClass>] [<Sealed>] [<ComVisibleAttribute(true)>] type Timeout = class end
The Timeout type exposes the following members.
Methods
| Name | Description |
|---|
Fields
| Name | Description | |
|---|---|---|
|
Infinite | A constant used to specify an infinite waiting period. This field is constant. |
Remarks
The only member of this class, Infinite, is a constant used by methods that accept an integer timeout parameter, such as Thread.Sleep(Int32), Thread.Join(Int32), and ReaderWriterLock.AcquireReaderLock(Int32).
Examples
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 Public Class ThreadInterrupt <MTAThread> _ 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; 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."); } } }
Visual C++
using namespace System; using namespace System::Security::Permissions; using namespace System::Threading; ref class StayAwake { private: bool sleepSwitch; public: property bool SleepSwitch { void set( bool value ) { sleepSwitch = value; } } StayAwake() { sleepSwitch = false; } 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." ); } } }; int main() { StayAwake^ stayAwake = gcnew StayAwake; Thread^ newThread = gcnew Thread( gcnew 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( "Main thread calls Interrupt on newThread." ); // Then tell newThread to go to sleep. stayAwake->SleepSwitch = true; // Wait for newThread to end. newThread->Join(); }
Version Information
.NET Framework
Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supported in: 4, 3.5 SP1Platforms
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Thread Safety
This type is thread safe.
See Also