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, TimeSpan, TimeSpan)

 

Data di pubblicazione: ottobre 2016

Inizializza una nuova istanza di Timer classe mediante TimeSpan i valori per misurare gli intervalli di tempo.

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

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

Parametri

callback
Type: System.Threading.TimerCallback

Un 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.TimeSpan

La quantità di tempo di attesa prima che il callback parametro richiama i metodi. Specificare il valore uno negativo (-1) in millisecondi per impedire l'avvio del timer. Specificare zero (0) per avviare il timer immediatamente.

period
Type: System.TimeSpan

L'intervallo di tempo tra le chiamate dei metodi a cui fa riferimento callback. Specificare il valore uno negativo (-1) in millisecondi per disabilitare la segnalazione periodica.

Exception Condition
ArgumentOutOfRangeException

Il numero di millisecondi nel valore di dueTime o period è negativo e non è uguale a Timeout.Infinite, o è maggiore di Int32.MaxValue.

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 è uno negativo (-1) in millisecondi, 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 negativo (-1) in millisecondi e dueTime è positivo, 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()
    {
        AutoResetEvent autoEvent     = new AutoResetEvent(false);
        StatusChecker  statusChecker = new StatusChecker(10);

        // Create the delegate that invokes methods for the timer.
        TimerCallback timerDelegate = 
            new TimerCallback(statusChecker.CheckStatus);

        TimeSpan delayTime = new TimeSpan(0, 0, 1);
        TimeSpan intervalTime = new TimeSpan(0, 0, 0, 0, 250);

        // Create a timer that signals the delegate to invoke 
        // CheckStatus after one second, and every 1/4 second 
        // thereafter.
        Console.WriteLine("{0} Creating timer.\n", 
            DateTime.Now.ToString("h:mm:ss.fff"));
        Timer stateTimer = new Timer(
            timerDelegate, autoEvent, delayTime, intervalTime);

        // When autoEvent signals, change the period to every 
        // 1/2 second.
        autoEvent.WaitOne(5000, false);
        stateTimer.Change(new TimeSpan(0), 
            intervalTime + intervalTime);
        Console.WriteLine("\nChanging period.\n");

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

class StatusChecker
{
    int invokeCount, 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 Main.
            invokeCount  = 0;
            autoEvent.Set();
        }
    }
}

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: