Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Costruttore Timer (TimerCallback, Object, Int32, Int32)

 

Data di pubblicazione: ottobre 2016

Inizializza una nuova istanza di Timer classe, utilizzando un intero con segno a 32 bit per specificare l'intervallo di tempo.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

public Timer(
	TimerCallback callback,
	object state,
	int dueTime,
	int period
)

Parametri

callback
Type: System.Threading.TimerCallback

Oggetto TimerCallback delegato che rappresenta un metodo da eseguire.

state
Type: System.Object

Oggetto contenente informazioni che verranno utilizzate dal metodo di callback, o null.

dueTime
Type: System.Int32

La quantità di tempo di attesa prima di callback viene richiamato, in millisecondi. Specificare Timeout.Infinite per impedire l'avvio del timer. Specificare zero (0) per avviare il timer immediatamente.

period
Type: System.Int32

L'intervallo di tempo tra le chiamate di callback, in millisecondi. Specificare Timeout.Infinite per disabilitare la segnalazione periodica.

Exception Condition
ArgumentOutOfRangeException

Il dueTime o period parametro è negativo e non è uguale a Timeout.Infinite.

ArgumentNullException

Il valore del parametro callback è null.

Il delegato specificato per il callback parametro viene richiamato una volta dopo dueTime scade e successivamente ogni volta che il period dell'intervallo di tempo.

Se dueTime è zero (0), callback viene richiamato immediatamente. Se dueTime è Timeout.Infinite, callback non viene richiamato, il timer viene disabilitato, ma possono essere riabilitati tramite la chiamata di Change metodo.

Poiché la Timer classe ha la stessa risoluzione l'orologio di sistema, è di circa 15 millisecondi nei sistemi Windows 7 e Windows 8, il callback delegato viene eseguito a intervalli definiti per la risoluzione del clock di sistema se period è minore rispetto alla risoluzione del clock di sistema. Se period è zero (0) o Timeout.Infinite e dueTime non Timeout.Infinite, callback viene richiamato una volta; il comportamento periodico del timer viene disabilitato, ma possono essere riabilitato tramite il Change metodo.

Il metodo specificato per callback deve essere rientrante, poiché viene chiamato su ThreadPool thread. Il metodo può essere eseguito simultaneamente in due thread del pool se l'intervallo del timer è inferiore al tempo necessario per eseguire il metodo o se tutti i thread di pool di thread sono in uso e il metodo viene accodato più volte.

Esempio di codice seguente viene illustrato come creare un TimerCallback delegare e inizializzare una nuova istanza di Timer classe.

using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        // Create an AutoResetEvent to signal the timeout threshold in the
        // timer callback has been reached.
        var autoEvent = new AutoResetEvent(false);

        var statusChecker = new StatusChecker(10);

        // Create a timer that invokes CheckStatus after one second, 
        // and every 1/4 second thereafter.
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n", 
                          DateTime.Now);
        var stateTimer = new Timer(statusChecker.CheckStatus, 
                                   autoEvent, 1000, 250);

        // When autoEvent signals, change the period to every half second.
        autoEvent.WaitOne();
        stateTimer.Change(0, 500);
        Console.WriteLine("\nChanging period to .5 seconds.\n");

        // When autoEvent signals the second time, dispose of the timer.
        autoEvent.WaitOne();
        stateTimer.Dispose();
        Console.WriteLine("\nDestroying timer.");
    }
}

class StatusChecker
{
    private int invokeCount;
    private int  maxCount;

    public StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("{0} Checking status {1,2}.", 
            DateTime.Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal the waiting thread.
            invokeCount = 0;
            autoEvent.Set();
        }
    }
}
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//       
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//       
//       Changing period to .5 seconds.
//       
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//       
//       Destroying timer.

Universal Windows Platform
Disponibile da 8.1
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: