Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Delegado TimerCallback

 

Publicado: octubre de 2016

Representa el método que controla las llamadas de un Timer.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(true)]
public delegate void TimerCallback(
	object state
)

Parámetros

state
Type: System.Object

Un objeto que contiene información específica de la aplicación relativa al método invocado por este delegado, o null.

Use un TimerCallback delegado para especificar el método que llama a un Timer. Este método no se ejecuta en el subproceso que creó el temporizador; se ejecuta en un subproceso de grupo de subprocesos independientes proporcionada por el sistema. El TimerCallback delegado invoca el método una vez después de transcurre el tiempo de inicio y continúa invocarlo una vez por cada intervalo del temporizador hasta que el Dispose método se llama, o hasta que el Timer.Change se invoca con el valor de intervalo Infinite.

System_CAPS_noteNota

Las devoluciones de llamada pueden producirse después de la Dispose() llama sobrecarga del método, porque el temporizador pone en cola devoluciones de llamada de ejecución por grupo de subprocesos. Puede usar el Dispose(WaitHandle) sobrecarga del método espera hasta que se completen todas las devoluciones de llamada.

El delegado de temporizador se especifica cuando se construye el temporizador y no se puede cambiar. La hora de inicio para un Timer se pasa en el dueTime parámetro de la Timer constructores y el período se pasa en el period parámetro. Para obtener un ejemplo que muestra cómo crear y utilizar un TimerCallback delegado, consulte System.Threading.Timer.

En el ejemplo de código siguiente se muestra cómo crear el delegado utilizado con la Timer clase.

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.

Plataforma universal de Windows
Disponible desde 8.1
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: