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 метода, указывающего интервал времени ожидания.