Thread.Sleep 方法

定義

在指定長度的時間內暫止目前的執行緒。

多載

Sleep(Int32)

在指定的毫秒數內暫止目前的執行緒。

Sleep(TimeSpan)

在指定長度的時間內暫止目前的執行緒。

Sleep(Int32)

在指定的毫秒數內暫止目前的執行緒。

public:
 static void Sleep(int millisecondsTimeout);
public static void Sleep (int millisecondsTimeout);
static member Sleep : int -> unit
Public Shared Sub Sleep (millisecondsTimeout As Integer)

參數

millisecondsTimeout
Int32

暫止執行緒的毫秒數。 如果 millisecondsTimeout 引數的值為零,則執行緒會將其剩餘的時間配量讓與準備好要執行的任何同等優先權執行緒。 如果沒有其他準備好要執行的同等優先權執行緒,則目前執行緒的執行不會暫停。

例外狀況

逾時值為負且不等於 Infinite

範例

下列範例會 Sleep 使用 方法來封鎖應用程式的主要執行緒。

using namespace System;
using namespace System::Threading;

int main()
{
    for (int i = 0; i < 5; i++)
    {
        Console::WriteLine("Sleep for 2 seconds.");
        Thread::Sleep(2000);
    }

    Console::WriteLine("Main thread exits.");
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
using System;
using System.Threading;

class Example
{
    static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Sleep for 2 seconds.");
            Thread.Sleep(2000);
        }

        Console.WriteLine("Main thread exits.");
    }
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
open System.Threading

for _ = 0 to 4 do
    printfn "Sleep for 2 seconds."
    Thread.Sleep 2000

printfn "Main thread exits."

// This example produces the following output:
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Main thread exits.
Imports System.Threading

Class Example

    Shared Sub Main()

        For i As Integer = 0 To 4
            Console.WriteLine("Sleep for 2 seconds.")
            Thread.Sleep(2000)
        Next

        Console.WriteLine("Main thread exits.")
    End Sub
End Class

' This example produces the following output:
'
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Main thread exits.

備註

在指定的時間量,作業系統不會排程執行緒執行。 這個方法會將執行緒的狀態變更為包含 WaitSleepJoin

您可以指定 Timeout.InfinitemillisecondsTimeout 參數,以無限期暫止執行緒。 不過,我們建議您改用其他 System.Threading 類別,例如 MutexMonitorEventWaitHandleSemaphore 來同步處理執行緒或管理資源。

系統時鐘會以稱為時鐘解析度的特定速率刻度。 實際的逾時可能不是指定的逾時,因為指定的逾時將會調整為與時鐘刻度一致。 如需時鐘解析和等候時間的詳細資訊,請參閱 Windows 系統 API 的 睡眠功能

此方法不會執行標準 COM 和 SendMessage 幫浦。

注意

如果您需要在具有 STAThreadAttribute 的執行緒上睡眠,但想要執行標準 COM 和 SendMessage 幫浦,請考慮使用其中一個指定逾時間隔的方法多 Join 載。

適用於

Sleep(TimeSpan)

在指定長度的時間內暫止目前的執行緒。

public:
 static void Sleep(TimeSpan timeout);
public static void Sleep (TimeSpan timeout);
static member Sleep : TimeSpan -> unit
Public Shared Sub Sleep (timeout As TimeSpan)

參數

timeout
TimeSpan

暫止執行緒的時間長度。 如果 timeout 引數的值為 Zero,則執行緒會將其剩餘的時間配量讓與準備好要執行的任何同等優先權執行緒。 如果沒有其他準備好要執行的同等優先權執行緒,則目前執行緒的執行不會暫停。

例外狀況

的值為負數 timeout ,且不等於 Infinite 毫秒,或大於 Int32.MaxValue 毫秒。

範例

下列範例會 Sleep(TimeSpan) 使用 方法多載來封鎖應用程式的主執行緒五次,每次兩秒。

using namespace System;
using namespace System::Threading;

int main()
{
    TimeSpan interval = TimeSpan(0, 0, 2);

    for (int i = 0; i < 5; i++)
    {
        Console::WriteLine("Sleep for 2 seconds.");
        Thread::Sleep(interval);
    }

    Console::WriteLine("Main thread exits.");
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
using System;
using System.Threading;

class Example
{
    static void Main()
    {
        TimeSpan interval = new TimeSpan(0, 0, 2);

        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Sleep for 2 seconds.");
            Thread.Sleep(interval);
        }

        Console.WriteLine("Main thread exits.");
    }
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
open System
open System.Threading

let interval = TimeSpan(0, 0, 2)

for _ = 0 to 4 do
    printfn "Sleep for 2 seconds."
    Thread.Sleep interval

printfn "Main thread exits."

// This example produces the following output:
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Main thread exits.
Imports System.Threading

Class Example

    Shared Sub Main()

        Dim interval As New TimeSpan(0, 0, 2)

        For i As Integer = 0 To 4
            Console.WriteLine("Sleep for 2 seconds.")
            Thread.Sleep(interval)
        Next

        Console.WriteLine("Main thread exits.")
    End Sub
End Class

' This example produces the following output:
'
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Main thread exits.

備註

在指定的時間量,作業系統不會排程執行緒執行。 這個方法會將執行緒的狀態變更為包含 WaitSleepJoin

您可以指定 Timeout.InfiniteTimeSpantimeout 參數,以無限期暫止執行緒。 不過,我們建議您改用其他 System.Threading 類別,例如 MutexMonitorEventWaitHandleSemaphore 來同步處理執行緒或管理資源。

這個 的多 Sleep 載會使用 中的 timeout 整數毫秒總數。 捨棄小數毫秒。

此方法不會執行標準 COM 和 SendMessage 幫浦。

注意

如果您需要在具有 STAThreadAttribute 的執行緒上睡眠,但想要執行標準 COM 和 SendMessage 幫浦,請考慮使用其中一個指定逾時間隔的方法多 Join 載。

適用於