¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo

Timer (Clase)

Actualización: noviembre 2007

Genera eventos recurrentes en una aplicación.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class Timer : Component, ISupportInitialize
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, ExternalThreading = true) */
public class Timer extends Component implements ISupportInitialize
public class Timer extends Component implements ISupportInitialize

0tcs6ww8.alert_note(es-es,VS.90).gifNota:

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el siguiente valor de la propiedad Resources: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el 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.

0tcs6ww8.alert_note(es-es,VS.90).gifNota:

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.

En .NET Framework versión 2.0 y anteriores, el componente Timer detecta y suprime todas las excepciones producidas por controladores de eventos para el evento Elapsed. Este comportamiento está sujeto a cambios en lanzamientos futuros de .NET Framework.

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.

0tcs6ww8.alert_note(es-es,VS.90).gifNota:

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 carrera.

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 ejemplo de código siguiente se establece un controlador de eventos para el evento Timer.Elapsedy se crea e inicia un temporizador. El controlador de eventos muestra la propiedad SignalTime cada vez que se provoca el evento.

using System;
using System.Timers;

public class Timer1
{
    private static System.Timers.Timer aTimer;

    public static void Main()
    {
        // Normally, the timer is declared at the class level,
        // so that it stays in scope as long as it is needed.
        // If the timer is declared in a long-running method,  
        // KeepAlive must be used to prevent the JIT compiler 
        // from allowing aggressive garbage collection to occur 
        // before the method ends. (See end of method.)
        //System.Timers.Timer aTimer;

        // Create a timer with a ten second interval.
        aTimer = new System.Timers.Timer(10000);

        // 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();

        // If the timer is declared in a long-running method, use
        // KeepAlive to prevent garbage collection from occurring
        // before the method ends.
        //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("The Elapsed event was raised at {0}", e.SignalTime);
    }
}

/* This code example produces output similar to the following:

Press the Enter key to exit the program.
The Elapsed event was raised at 5/20/2007 8:42:27 PM
The Elapsed event was raised at 5/20/2007 8:42:29 PM
The Elapsed event was raised at 5/20/2007 8:42:31 PM
...
 */


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 Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft