Windows Dev Center

Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

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 Language Filter 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

Show:
© 2015 Microsoft