Číst v angličtině

Sdílet prostřednictvím


Thread.Sleep Metoda

Definice

Pozastaví aktuální vlákno na zadanou dobu.

Přetížení

Sleep(Int32)

Pozastaví aktuální vlákno na zadaný počet milisekund.

Sleep(TimeSpan)

Pozastaví aktuální vlákno na zadanou dobu.

Sleep(Int32)

Zdroj:
Thread.cs
Zdroj:
Thread.cs
Zdroj:
Thread.cs

Pozastaví aktuální vlákno na zadaný počet milisekund.

public static void Sleep(int millisecondsTimeout);

Parametry

millisecondsTimeout
Int32

Počet milisekund, pro které je vlákno pozastaveno. Pokud je hodnota argumentu millisecondsTimeout nula, vlákno přenechá zbytek svého časového řezu na libovolné vlákno se stejnou prioritou, které je připravené ke spuštění. Pokud nejsou připravená ke spuštění žádná další vlákna se stejnou prioritou, spuštění aktuálního vlákna se nepozastaví.

Výjimky

Hodnota časového limitu je záporná a nerovná se hodnotě Infinite.

Příklady

Následující příklad používá metodu Sleep k blokování hlavního vlákna aplikace.

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.
 */

Poznámky

Vlákno nebude naplánováno na spuštění operačním systémem po zadanou dobu. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.

Můžete zadat Timeout.Infinite , aby millisecondsTimeout parametr pozastavil vlákno na neomezenou dobu. K synchronizaci vláken nebo správě prostředků ale doporučujeme použít jiné System.Threading třídy, MonitorEventWaitHandlejako Mutexje , , nebo Semaphore .

Systémové hodiny tikají určitou rychlostí, které se říká rozlišení hodin. Skutečný časový limit nemusí být přesně zadaný časový limit, protože zadaný časový limit se upraví tak, aby odpovídal časovým limitům. Další informace o rozlišení hodin a čekací době najdete v tématu Funkce Spánku z rozhraní API systému Windows.

Tato metoda neprovádí standardní pumpování COM a SendMessage.

Poznámka

Pokud potřebujete spát na vlákně, které má STAThreadAttribute, ale chcete provést standardní com a SendMessage pumpování, zvažte použití jednoho z přetížení Join metody, která určuje interval časového limitu.

Platí pro

.NET 10 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Sleep(TimeSpan)

Zdroj:
Thread.cs
Zdroj:
Thread.cs
Zdroj:
Thread.cs

Pozastaví aktuální vlákno na zadanou dobu.

public static void Sleep(TimeSpan timeout);

Parametry

timeout
TimeSpan

Doba, po kterou je vlákno pozastaveno. Pokud je Zerohodnota argumentu timeout , vlákno přenechá zbytek svého časového řezu libovolnému vláknu se stejnou prioritou, které je připravené ke spuštění. Pokud nejsou připravená ke spuštění žádná další vlákna se stejnou prioritou, spuštění aktuálního vlákna se nepozastaví.

Výjimky

Hodnota timeout je záporná a nerovná se Infinite v milisekundách nebo je větší než Int32.MaxValue milisekund.

Příklady

Následující příklad používá Sleep(TimeSpan) přetížení metody k zablokování hlavního vlákna aplikace pětkrát, vždy po dobu dvou sekund.

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.
 */

Poznámky

Vlákno nebude naplánováno na spuštění operačním systémem po zadanou dobu. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.

Můžete zadat Timeout.InfiniteTimeSpan , aby timeout parametr pozastavil vlákno na neomezenou dobu. K synchronizaci vláken nebo správě prostředků ale doporučujeme použít jiné System.Threading třídy, MonitorEventWaitHandlejako Mutexje , , nebo Semaphore .

Toto přetížení Sleep využívá celkový počet celých milisekund v nástroji timeout. Desetinné milisekundy se zahodí.

Tato metoda neprovádí standardní pumpování COM a SendMessage.

Poznámka

Pokud potřebujete spát na vlákně, které má STAThreadAttribute, ale chcete provést standardní com a SendMessage pumpování, zvažte použití jednoho z přetížení Join metody, která určuje interval časového limitu.

Platí pro

.NET 10 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1