Thread.Sleep Metodo

Definizione

Sospende il thread corrente per il periodo di tempo specificato.

Overload

Sleep(Int32)

Sospende il thread corrente per il numero specificato di millisecondi.

Sleep(TimeSpan)

Sospende il thread corrente per il periodo di tempo specificato.

Sleep(Int32)

Sospende il thread corrente per il numero specificato di millisecondi.

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

Parametri

millisecondsTimeout
Int32

Numero di millisecondi per cui sospendere il thread. Se il valore dell'argomento millisecondsTimeout è zero, il thread cede il periodo di tempo rimanente a un thread di uguale priorità pronto per l'esecuzione. Se non sono presenti altri thread di uguale priorità pronti per l'esecuzione, l'esecuzione del thread corrente non viene sospesa.

Eccezioni

Il valore di timeout è negativo e non è uguale a Infinite.

Esempio

Nell'esempio seguente viene usato il Sleep metodo per bloccare il thread principale dell'applicazione.

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.

Commenti

Il thread non verrà pianificato per l'esecuzione dal sistema operativo per il periodo di tempo specificato. Questo metodo modifica lo stato del thread in modo da includere WaitSleepJoin.

È possibile specificare Timeout.Infinite che il millisecondsTimeout parametro sospende il thread per un periodo illimitato. È tuttavia consigliabile usare altre System.Threading classi, Mutexad esempio , Monitor, EventWaitHandleo Semaphore per sincronizzare i thread o gestire le risorse.

L'orologio di sistema si applica a una frequenza specifica denominata risoluzione dell'orologio. Il timeout effettivo potrebbe non essere esattamente il timeout specificato, perché il timeout specificato verrà modificato in modo da coincidere con i tick di clock. Per altre informazioni sulla risoluzione dell'orologio e sul tempo di attesa, vedere la funzione Sleep dalle API di sistema Windows.

Questo metodo non esegue la pompa COM e SendMessage standard.

Nota

Se è necessario dormire su un thread con STAThreadAttribute, ma si vuole eseguire il pumping COM e SendMessage standard, è consigliabile usare uno degli overload del Join metodo che specifica un intervallo di timeout.

Si applica a

Sleep(TimeSpan)

Sospende il thread corrente per il periodo di tempo specificato.

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

Parametri

timeout
TimeSpan

Periodo di tempo per cui sospendere il thread. Se il valore dell'argomento timeout è Zero, il thread cede il periodo di tempo rimanente a un thread di uguale priorità pronto per l'esecuzione. Se non sono presenti altri thread di uguale priorità pronti per l'esecuzione, l'esecuzione del thread corrente non viene sospesa.

Eccezioni

Il valore di timeout è negativo e non è uguale a Infinite in millisecondi oppure è maggiore di Int32.MaxValue millisecondi.

Esempio

Nell'esempio seguente viene usato l'overload del Sleep(TimeSpan) metodo per bloccare il thread principale dell'applicazione cinque volte, per due secondi ogni volta.

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.

Commenti

Il thread non verrà pianificato per l'esecuzione dal sistema operativo per il periodo di tempo specificato. Questo metodo modifica lo stato del thread in modo da includere WaitSleepJoin.

È possibile specificare Timeout.InfiniteTimeSpan che il timeout parametro sospende il thread per un periodo illimitato. È tuttavia consigliabile usare altre System.Threading classi, Mutexad esempio , Monitor, EventWaitHandleo Semaphore per sincronizzare i thread o gestire le risorse.

Questo overload di Sleep usa il numero totale di millisecondi interi in timeout. I millisecondi frazionari vengono eliminati.

Questo metodo non esegue la pompa COM e SendMessage standard.

Nota

Se è necessario dormire su un thread con STAThreadAttribute, ma si vuole eseguire il pumping COM e SendMessage standard, è consigliabile usare uno degli overload del Join metodo che specifica un intervallo di timeout.

Si applica a