Exportar (0) Imprimir
Expandir todo

Timer (Clase)

Genera eventos recurrentes en una aplicación.

Espacio de nombres: System.Timers
Ensamblado: System (en system.dll)

public class Timer : Component, ISupportInitialize
public class Timer extends Component implements ISupportInitialize
public class Timer extends Component implements ISupportInitialize
No aplicable.

NotaNota:

El atributo HostProtectionAttribute aplicado a esta clase tiene el valor de propiedad Resources siguiente: Synchronization | ExternalThreading. HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician al hacer doble clic en un icono, escribir un comando o escribir una dirección URL en un explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación de SQL Server y atributos de protección del host.

El componente Timer es un temporizador basado en servidor que permite especificar un intervalo recurrente en el que se provoca el evento Elapsed en la aplicación. Entonces, se puede controlar este evento para proporcionar un procesamiento normal. Por ejemplo, supongamos que un servidor crítico debe mantenerse en funcionamiento las 24 horas del día y los 7 días de la semana. Puede crearse un servicio que utilice Timer para comprobar periódicamente el servidor y asegurarse de que el sistema se encuentra en funcionamiento. Si el sistema no responde, el servicio podría intentar reiniciar el servidor o notificárselo a un administrador.

El Timer basado en servidor está diseñado para utilizarlo con subprocesos de trabajo en un entorno multiproceso. Los temporizadores basados en servidor pueden desplazarse entre subprocesos para controlar el evento Elapsed provocado, dando lugar a una mayor precisión que la proporcionada por los temporizadores de Windows al provocar el evento en el momento exacto. Para obtener más información sobre los temporizadores basados en servidor, vea Introducción a los temporizadores basados en servidor.

El componente Timer provoca el evento Elapsed, que se basa en el valor de la propiedad Interval. Se puede controlar este evento para realizar el procesamiento que se necesite. Por ejemplo, si se supone que se tiene una aplicación de ventas en línea que envía continuamente pedidos de ventas a una base de datos. El servicio que recopila las instrucciones de envío funciona con lotes de pedidos, en vez de procesar cada pedido individualmente. Se puede utilizar Timer para iniciar el procesamiento de lotes cada 30 minutos.

NotaNota:

Cuando AutoReset se establece en false, Timer provoca el evento Elapsed sólo una vez después de que haya transcurrido el primer intervalo (propiedad Interval). Para seguir provocando al evento Elapsed en la propiedad Interval, se debe establecer la propiedad AutoReset en true.

El evento Elapsed se provoca en un subproceso de ThreadPool. Si el procesamiento del evento Elapsed dura más que Interval, el evento puede provocarse de nuevo en otro subproceso de ThreadPool. Por lo tanto, el controlador de eventos debe ser de reentrada.

NotaNota:

El método de control de eventos puede ejecutarse en un subproceso al mismo tiempo que otro subproceso llama al método Stop o establece la propiedad Enabled en false. Esto puede dar lugar a que el evento Elapsed se provoque después de detenerse el temporizador. En el ejemplo de código para el método Stop se muestra una forma de evitar esta condición de anticipación.

Si se utiliza la clase Timer con un elemento de interfaz de usuario, como un formulario o un control, se debe asignar el formulario o el control que contiene la clase Timer a la propiedad SynchronizingObject, de modo que se calculen las referencias del evento al subproceso de la interfaz de usuario.

Timer no es visible en tiempo de ejecución.

Para obtener una lista con los valores de propiedad iniciales de una instancia de Timer, vea el constructor de Timer.

En el siguiente ejemplo se crea un Timer que muestra "Hello World!" en la consola cada cinco segundos.

Se utiliza el espacio de nombres System.Timers para este ejemplo.

using System;
using System.Timers;

public class Timer1
{
    public static void Main()
    {
        // Normally, the timer is declared at the class level, so
        // that it doesn't go out of scope when the method ends.
        // In this example, the timer is needed only while Main 
        // is executing. However, KeepAlive must be used at the
        // end of Main, to prevent the JIT compiler from allowing 
        // aggressive garbage collection to occur before Main 
        // ends.
        System.Timers.Timer aTimer = new System.Timers.Timer();

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        // Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000;
        aTimer.Enabled = true;
 
        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();

        // Keep the timer alive until the end of Main.
        GC.KeepAlive(aTimer);
    }
 
    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("Hello World!");
    }
}
 

Todos los miembros static públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0, 1.1, 1.0
Mostrar:
© 2014 Microsoft