Thread.Sleep Metoda

Definicja

Zawiesza bieżący wątek przez określony czas.

Przeciążenia

Nazwa Opis
Sleep(Int32)

Zawiesza bieżący wątek dla określonej liczby milisekund.

Sleep(TimeSpan)

Zawiesza bieżący wątek przez określony czas.

Sleep(Int32)

Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs

Zawiesza bieżący wątek dla określonej liczby milisekund.

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

Parametry

millisecondsTimeout
Int32

Liczba milisekund, dla których wątek jest zawieszony. Jeśli wartość argumentu millisecondsTimeout ma wartość zero, wątek rezygnuje z reszty wycinka czasu do dowolnego wątku o równym priorytetzie, który jest gotowy do uruchomienia. Jeśli nie ma żadnych innych wątków o równym prioryfikcie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest zawieszone.

Wyjątki

Wartość limitu czasu jest ujemna i nie jest równa Infinitewartości .

Przykłady

W poniższym przykładzie użyto Sleep metody , aby zablokować główny wątek aplikacji.

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.

Uwagi

Wątek nie zostanie zaplanowany do wykonania przez system operacyjny przez określony czas. Ta metoda zmienia stan wątku tak, aby zawierał WaitSleepJoinelement .

Można określić Timeout.Infinite parametr, millisecondsTimeout aby zawiesić wątek na czas nieokreślony. Zalecamy jednak używanie innych System.Threading klas, takich jak Mutex, Monitor, EventWaitHandlelub, do Semaphore synchronizowania wątków lub zarządzania zasobami.

Zegar systemowy tyka z określoną szybkością o nazwie rozdzielczość zegara. Rzeczywiste przekroczenie limitu czasu może nie być dokładnie określonym limitem czasu, ponieważ określony limit czasu zostanie dostosowany tak, aby zbiegł się z znacznikami zegara. Aby uzyskać więcej informacji na temat rozdzielczości zegara i czasu oczekiwania, zobacz funkcję Sleep z interfejsów API systemu Windows.

Ta metoda nie wykonuje standardowej pompy COM i SendMessage.

Note

Jeśli musisz spać w wątku, który ma STAThreadAttributewartość , ale chcesz wykonać standardowe pompowanie COM i SendMessage, rozważ użycie jednego z przeciążeń Join metody, która określa interwał limitu czasu.

Dotyczy

Sleep(TimeSpan)

Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs

Zawiesza bieżący wątek przez określony czas.

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

Parametry

timeout
TimeSpan

Czas wstrzymania wątku. Jeśli wartość argumentu timeout to Zero, wątek rezygnuje z reszty fragmentu czasu do dowolnego wątku o równym priorytcie, który jest gotowy do uruchomienia. Jeśli nie ma żadnych innych wątków o równym prioryfikcie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest zawieszone.

Wyjątki

Wartość jest ujemna timeout i nie jest równa Infinite w milisekundach lub jest większa niż w milisekundach Int32.MaxValue .

Przykłady

W poniższym przykładzie użyto Sleep(TimeSpan) przeciążenia metody, aby zablokować główny wątek aplikacji pięć razy, przez dwie sekundy za każdym razem.

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.

Uwagi

Wątek nie zostanie zaplanowany do wykonania przez system operacyjny przez określony czas. Ta metoda zmienia stan wątku tak, aby zawierał WaitSleepJoinelement .

Można określić Timeout.InfiniteTimeSpan parametr, timeout aby zawiesić wątek na czas nieokreślony. Zalecamy jednak używanie innych System.Threading klas, takich jak Mutex, Monitor, EventWaitHandlelub, do Semaphore synchronizowania wątków lub zarządzania zasobami.

To przeciążenie Sleep używa całkowitej liczby całych milisekund w elem timeout. Ułamkowe milisekundy są odrzucane.

Ta metoda nie wykonuje standardowej pompy COM i SendMessage.

Note

Jeśli musisz spać w wątku, który ma STAThreadAttributewartość , ale chcesz wykonać standardowe pompowanie COM i SendMessage, rozważ użycie jednego z przeciążeń Join metody, która określa interwał limitu czasu.

Dotyczy