Thread.Sleep Метод

Определение

Приостанавливает текущий поток в течение указанного периода времени.

Перегрузки

Имя Описание
Sleep(Int32)

Приостанавливает текущий поток для указанного числа миллисекунда.

Sleep(TimeSpan)

Приостанавливает текущий поток в течение указанного периода времени.

Sleep(Int32)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Приостанавливает текущий поток для указанного числа миллисекунда.

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 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.Infinite для приостановки millisecondsTimeout потока на неопределенный срок. Однако рекомендуется использовать другие System.Threading классы, такие как Mutex, MonitorEventWaitHandleили Semaphore вместо этого для синхронизации потоков или управления ресурсами.

Системные часы тикают по определенной частоте, называемой разрешением часов. Фактическое время ожидания может не совпадать с заданным тайм-аутом, так как указанное время ожидания будет скорректировано на совпадение с часовыми галками. Дополнительные сведения о разрешении часов и времени ожидания см. в функции Sleep из системных API Windows.

Этот метод не выполняет стандартное перекачки COM и SendMessage.

Note

Если вам нужно спать в потоке, который имеется STAThreadAttribute, но вы хотите выполнить стандартное перекачки COM и SendMessage, рассмотрите возможность использования одной из перегрузок Join метода, указывающего интервал времени ожидания.

Применяется к

Sleep(TimeSpan)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Приостанавливает текущий поток в течение указанного периода времени.

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 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.InfiniteTimeSpan для приостановки timeout потока на неопределенный срок. Однако рекомендуется использовать другие System.Threading классы, такие как Mutex, MonitorEventWaitHandleили Semaphore вместо этого для синхронизации потоков или управления ресурсами.

Эта перегрузка Sleep использует общее количество целых миллисекундах в timeout. Дробные миллисекунда удаляются.

Этот метод не выполняет стандартное перекачки COM и SendMessage.

Note

Если вам нужно спать в потоке, который имеется STAThreadAttribute, но вы хотите выполнить стандартное перекачки COM и SendMessage, рассмотрите возможность использования одной из перегрузок Join метода, указывающего интервал времени ожидания.

Применяется к