Timer Timer Timer Timer Class

Definición

Genera un evento después de un intervalo establecido, con la opción de generar eventos recurrentes.Generates an event after a set interval, with an option to generate recurring events.

public ref class Timer : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type Timer = class
    inherit Component
    interface ISupportInitialize
Public Class Timer
Inherits Component
Implements ISupportInitialize
Herencia
Implementaciones

Ejemplos

El ejemplo siguiente crea un System.Timers.Timer objeto que se activa su Timer.Elapsed eventos cada dos segundos (2.000 milisegundos), configura un controlador de eventos para el evento e inicia el temporizador.The following example instantiates a System.Timers.Timer object that fires its Timer.Elapsed event every two seconds (2,000 milliseconds), sets up an event handler for the event, and starts the timer. El controlador de eventos muestra el valor de la ElapsedEventArgs.SignalTime propiedad cada vez que se provoca.The event handler displays the value of the ElapsedEventArgs.SignalTime property each time it is raised.

using System;
using System.Timers;

public class Example
{
   private static System.Timers.Timer aTimer;
   
   public static void Main()
   {
      SetTimer();

      Console.WriteLine("\nPress the Enter key to exit the application...\n");
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
      Console.ReadLine();
      aTimer.Stop();
      aTimer.Dispose();
      
      Console.WriteLine("Terminating the application...");
   }

   private static void SetTimer()
   {
        // Create a timer with a two second interval.
        aTimer = new System.Timers.Timer(2000);
        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;
        aTimer.AutoReset = true;
        aTimer.Enabled = true;
    }

    private static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime);
    }
}
// The example displays output like the following:
//       Press the Enter key to exit the application...
//
//       The application started at 09:40:29.068
//       The Elapsed event was raised at 09:40:31.084
//       The Elapsed event was raised at 09:40:33.100
//       The Elapsed event was raised at 09:40:35.100
//       The Elapsed event was raised at 09:40:37.116
//       The Elapsed event was raised at 09:40:39.116
//       The Elapsed event was raised at 09:40:41.117
//       The Elapsed event was raised at 09:40:43.132
//       The Elapsed event was raised at 09:40:45.133
//       The Elapsed event was raised at 09:40:47.148
//
//       Terminating the application...
Imports System.Timers

Public Module Example
    Private aTimer As System.Timers.Timer

    Public Sub Main()
        SetTimer()

      Console.WriteLine("{0}Press the Enter key to exit the application...{0}",
                        vbCrLf)
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}",
                        DateTime.Now)
      Console.ReadLine()
      aTimer.Stop()
      aTimer.Dispose()

      Console.WriteLine("Terminating the application...")
    End Sub

    Private Sub SetTimer()
        ' Create a timer with a two second interval.
        aTimer = New System.Timers.Timer(2000)
        ' Hook up the Elapsed event for the timer. 
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.AutoReset = True
        aTimer.Enabled = True
    End Sub

    ' The event handler for the Timer.Elapsed event. 
    Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime)
    End Sub 
End Module
' The example displays output like the following:
'       Press the Enter key to exit the application...
'
'       The application started at 09:40:29.068
'       The Elapsed event was raised at 09:40:31.084
'       The Elapsed event was raised at 09:40:33.100
'       The Elapsed event was raised at 09:40:35.100
'       The Elapsed event was raised at 09:40:37.116
'       The Elapsed event was raised at 09:40:39.116
'       The Elapsed event was raised at 09:40:41.117
'       The Elapsed event was raised at 09:40:43.132
'       The Elapsed event was raised at 09:40:45.133
'       The Elapsed event was raised at 09:40:47.148
'
'       Terminating the application...

Comentarios

El Timer componente es un temporizador basado en servidor que genera un Elapsed eventos en la aplicación después del número de milisegundos en el Interval ha transcurrido la propiedad.The Timer component is a server-based timer that raises an Elapsed event in your application after the number of milliseconds in the Interval property has elapsed. Puede configurar el Timer objeto para generar el evento mediante una sola vez o varias veces el AutoReset propiedad.You can configure the Timer object to raise the event just once or repeatedly using the AutoReset property. Normalmente, un Timer objeto se declara en el nivel de clase para que permanezca en el ámbito siempre y cuando sea necesario.Typically, a Timer object is declared at the class level so that it stays in scope as long as it is needed. A continuación, puede controlar su Elapsed eventos para proporcionar procesamiento normal.You can then handle its Elapsed event to provide regular processing. Por ejemplo, suponga que tiene un servidor crítico que se debe mantener ejecuta 24 horas al día, 7 días a la semana.For example, suppose you have a critical server that must be kept running 24 hours a day, 7 days a week. Puede crear un servicio que utiliza un Timer objeto para comprobar periódicamente el servidor y asegúrese de que el sistema está en funcionamiento.You could create a service that uses a Timer object to periodically check the server and ensure that the system is up and running. Si el sistema no responde, el servicio podría intentar reiniciar el servidor o notificar a un administrador.If the system is not responding, the service could attempt to restart the server or notify an administrator.

Importante

La Timer clase no está disponible para todas las implementaciones de .NET y versiones, como .NET Standard 1.6 y versiones inferiores.The Timer class is not available for all .NET implementations and versions, such as .NET Standard 1.6 and lower versions. En estos casos, puede usar el System.Threading.Timer clase en su lugar.In these cases, you can use the System.Threading.Timer class instead.

Este tipo implementa la IDisposable interfaz.This type implements the IDisposable interface. Cuando haya terminado de utilizar el tipo, debe deshacerse de él directa o indirectamente.When you have finished using the type, you should dispose of it either directly or indirectly. Para deshacerse del tipo directamente, llame a su Dispose método en un try / catch bloque.To dispose of the type directly, call its Dispose method in a try/catch block. Para deshacerse de él, indirectamente, usar una construcción de lenguaje, como using (en C#) o Using (en Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Para obtener más información, vea la sección "Uso de un objeto que implementa IDisposable" en el IDisposable tema de la interfaz.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Basado en el servidor System.Timers.Timer clase está diseñada para su uso con subprocesos de trabajo en un entorno multiproceso.The server-based System.Timers.Timer class is designed for use with worker threads in a multithreaded environment. Temporizadores de servidor pueden moverse entre los subprocesos para controlar el elevado Elapsed eventos, lo que más precisión que los temporizadores de Windows en generar el evento en tiempo.Server timers can move among threads to handle the raised Elapsed event, resulting in more accuracy than Windows timers in raising the event on time.

El System.Timers.Timer componente genera el Elapsed eventos, en función del valor (en milisegundos) de la Interval propiedad.The System.Timers.Timer component raises the Elapsed event, based on the value (in milliseconds) of the Interval property. Puede controlar este evento para realizar el procesamiento que necesita.You can handle this event to perform the processing you need. Por ejemplo, suponga que tiene una aplicación de ventas en línea que envía continuamente los pedidos de ventas a una base de datos.For example, suppose that you have an online sales application that continuously posts sales orders to a database. El servicio que compila las instrucciones de envío funciona en un lote de pedidos en lugar de procesar cada pedido individualmente.The service that compiles the instructions for shipping operates on a batch of orders rather than processing each order individually. Puede usar un Timer para iniciar la cada 30 minutos de procesamiento por lotes.You could use a Timer to start the batch processing every 30 minutes.

Importante

La clase System.Timers.Timer tiene la misma resolución que el reloj del sistema.The System.Timers.Timer class has the same resolution as the system clock. Esto significa que el Elapsed desencadenará el evento en un intervalo definido por la resolución del reloj del sistema si el Interval propiedad es menor que la resolución del reloj del sistema.This means that the Elapsed event will fire at an interval defined by the resolution of the system clock if the Interval property is less than the resolution of the system clock. Para obtener más información, vea la propiedad Interval.For more information, see the Interval property.

Cuando AutoReset está establecido en false, un System.Timers.Timer objeto genera el Elapsed evento una sola vez, después del primer Interval ha transcurrido.When AutoReset is set to false, a System.Timers.Timer object raises the Elapsed event only once, after the first Interval has elapsed. Para seguir provocando la Elapsed eventos periódicamente en el intervalo definido por el Interval, establezca AutoReset a true, que es el valor predeterminado.To keep raising the Elapsed event regularly at the interval defined by the Interval, set AutoReset to true, which is the default value.

El Timer componente detecta y suprime todas las excepciones producidas por controladores de eventos para el Elapsed eventos.The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. Este comportamiento está sujeta a cambios en futuras versiones de .NET Framework.This behavior is subject to change in future releases of the .NET Framework. Sin embargo, tenga en cuenta que esto no es así de controladores de eventos que se ejecutan de forma asincrónica e incluyen la await operador (en C#) o el Await operador (en Visual Basic).Note, however, that this is not true of event handlers that execute asynchronously and include the await operator (in C#) or the Await operator (in Visual Basic). Las excepciones producidas en estos controladores de eventos se propagan hacia el subproceso que realiza la llamada, como se muestra en el ejemplo siguiente.Exceptions thrown in these event handlers are propagated back to the calling thread, as the following example illustrates. Para obtener más información sobre las excepciones producidas en los métodos asincrónicos, vea Exception Handling.For more information on exceptions thrown in asynchronous methods, see Exception Handling.

using System;
using System.Threading.Tasks;
using System.Timers;

class Example
{
   static void Main()
   {
      Timer timer = new Timer(1000);
      timer.Elapsed += async ( sender, e ) => await HandleTimer();
      timer.Start();
      Console.Write("Press any key to exit... ");
      Console.ReadKey();
   }

   private static Task HandleTimer()
   {
     Console.WriteLine("\nHandler not implemented..." );
     throw new NotImplementedException();
   }
}
// The example displays output like the following:
//   Press any key to exit...
//   Handler not implemented...
//   
//   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
//      at Example.HandleTimer()
//      at Example.<<Main>b__0>d__2.MoveNext()
//   --- End of stack trace from previous location where exception was thrown ---
//      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
//      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
//      at System.Threading.ThreadPoolWorkQueue.Dispatch()
Imports System.Threading.Tasks
Imports System.Timers

Public Module Example
   Public Sub Main()
      Dim timer As New Timer(1000)  
      AddHandler timer.Elapsed, AddressOf Example.HandleTimer     
      'timer.Elapsed = Async ( sender, e ) => await HandleTimer()
      timer.Start()
      Console.Write("Press any key to exit... ")
      Console.ReadKey()
   End Sub

   Private Async Sub HandleTimer(sender As Object, e As EventArgs)
      Await Task.Run(Sub()
                        Console.WriteLine()
                        Console.WriteLine("Handler not implemented..." )
                        Throw New NotImplementedException()
                     End Sub)   
   End Sub
End Module
' The example displays output like the following:
'   Press any key to exit...
'   Handler not implemented...
'   
'   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
'      at Example._Lambda$__1()
'      at System.Threading.Tasks.Task.Execute()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
'      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
'      at Example.VB$StateMachine_0_HandleTimer.MoveNext()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
'      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
'      at System.Threading.ThreadPoolWorkQueue.Dispatch()

Si el SynchronizingObject propiedad es null, Elapsed evento se genera en un ThreadPool subproceso.If the SynchronizingObject property is null, the Elapsed event is raised on a ThreadPool thread. Si el procesamiento de la Elapsed evento dura más de Interval, es posible que provoca el evento nuevo en otro ThreadPool subproceso.If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. En esta situación, el controlador de eventos debe ser reentrante.In this situation, the event handler should be reentrant.

Nota

El método de control de eventos puede ejecutarse en un subproceso al mismo tiempo que otro subproceso llama a la Stop método o establece el Enabled propiedad a false.The event-handling method might run on one thread at the same time that another thread calls the Stop method or sets the Enabled property to false. Esto podría dar lugar a la Elapsed evento que se provoca cuando se haya detenido el temporizador.This might result in the Elapsed event being raised after the timer is stopped. El código de ejemplo para el Stop método muestra una forma de evitar esta condición de carrera.The example code for the Stop method shows one way to avoid this race condition.

Incluso si SynchronizingObject no es null, Elapsed los eventos pueden producirse después de la Dispose o Stop ha llamado al método o después del Enabled se ha establecido la propiedad en false, ya que la señal para generar el Elapsed evento siempre se pone en cola para su ejecución en un subproceso ThreadPool.Even if SynchronizingObject is not null, Elapsed events can occur after the Dispose or Stop method has been called or after the Enabled property has been set to false, because the signal to raise the Elapsed event is always queued for execution on a thread pool thread. Una manera de resolver esta condición de carrera es establecer una marca que indica el controlador de eventos para el Elapsed evento omita algunos eventos posteriores.One way to resolve this race condition is to set a flag that tells the event handler for the Elapsed event to ignore subsequent events.

Si usa el System.Timers.Timer clase con un elemento de interfaz de usuario, como un formulario o control, sin colocar el temporizador en ese elemento de interfaz de usuario, asignar el formulario o control que contiene el Timer a la SynchronizingObject propiedad, por lo que es el evento calcular las referencias para el subproceso de interfaz de usuario.If you use the System.Timers.Timer class with a user interface element, such as a form or control, without placing the timer on that user interface element, assign the form or control that contains the Timer to the SynchronizingObject property, so that the event is marshaled to the user interface thread.

Para obtener una lista de valores de propiedad predeterminados para una instancia de Timer, consulte el Timer constructor.For a list of default property values for an instance of Timer, see the Timer constructor.

Sugerencia

Tenga en cuenta que .NET incluye cuatro clases denominadas Timer, cada uno de los que ofrece una funcionalidad diferente:Be aware that .NET includes four classes named Timer, each of which offers different functionality:

  • System.Timers.Timer (este tema): desencadena un evento a intervalos regulares.System.Timers.Timer (this topic): fires an event at regular intervals. La clase está diseñada para usarla como basada en un servidor o componente del servicio en un entorno multiproceso; no tiene ninguna interfaz de usuario y no está visible en tiempo de ejecución.The class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Threading.Timer: un método de devolución de llamada solo se ejecuta en un subproceso de grupo a intervalos regulares.System.Threading.Timer: executes a single callback method on a thread pool thread at regular intervals. Se define el método de devolución de llamada cuando el temporizador se crea una instancia y no se puede cambiar.The callback method is defined when the timer is instantiated and cannot be changed. Al igual que el System.Timers.Timer (clase), esta clase está pensada para su uso como un componente basado en servidor o servicio en un entorno multiproceso; no tiene ninguna interfaz de usuario y no está visible en tiempo de ejecución.Like the System.Timers.Timer class, this class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Windows.Forms.Timer (Solo en .NET framework): un componente de Windows Forms que se activa un evento a intervalos regulares.System.Windows.Forms.Timer (.NET Framework only): a Windows Forms component that fires an event at regular intervals. El componente no tiene interfaz de usuario y está diseñado para su uso en un entorno de un único subproceso.The component has no user interface and is designed for use in a single-threaded environment.
  • System.Web.UI.Timer (Solo en .NET framework): un componente de ASP.NET que realiza el postback de página web asincrónicas o sincrónicas a intervalos regulares.System.Web.UI.Timer (.NET Framework only): an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.

Constructores

Timer() Timer() Timer() Timer()

Inicializa una nueva instancia de la clase Timer y establece todas las propiedades en sus valores iniciales.Initializes a new instance of the Timer class, and sets all the properties to their initial values.

Timer(Double) Timer(Double) Timer(Double) Timer(Double)

Inicializa una nueva instancia de la clase Timer y establece la propiedad Interval en el número de milisegundos especificado.Initializes a new instance of the Timer class, and sets the Interval property to the specified number of milliseconds.

Propiedades

AutoReset AutoReset AutoReset AutoReset

Obtiene o establece un valor booleano que indica si Timer debe generar el evento Elapsed solo una vez (false) o repetidamente (true).Gets or sets a Boolean indicating whether the Timer should raise the Elapsed event only once (false) or repeatedly (true).

CanRaiseEvents CanRaiseEvents CanRaiseEvents CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.Gets a value indicating whether the component can raise an event.

(Inherited from Component)
Container Container Container Container

Obtiene IContainer que contiene Component.Gets the IContainer that contains the Component.

(Inherited from Component)
DesignMode DesignMode DesignMode DesignMode

Obtiene un valor que indica si Component está actualmente en modo de diseño.Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
Enabled Enabled Enabled Enabled

Obtiene o establece un valor que indica si Timer debe generar el evento Elapsed.Gets or sets a value indicating whether the Timer should raise the Elapsed event.

Events Events Events Events

Obtiene la lista de controladores de eventos asociados a Component.Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
Interval Interval Interval Interval

Obtiene o establece el intervalo, expresado en milisegundos, en el que se generará el evento Elapsed.Gets or sets the interval, expressed in milliseconds, at which to raise the Elapsed event.

Site Site Site Site

Obtiene o establece el sitio que enlaza el objeto Timer a su contenedor en modo de diseño.Gets or sets the site that binds the Timer to its container in design mode.

SynchronizingObject SynchronizingObject SynchronizingObject SynchronizingObject

Obtiene o establece el objeto que se utiliza para calcular las referencias de las llamadas del controlador de eventos que se emiten al transcurrir un intervalo.Gets or sets the object used to marshal event-handler calls that are issued when an interval has elapsed.

Métodos

BeginInit() BeginInit() BeginInit() BeginInit()

Comienza la inicialización en tiempo de ejecución de un objeto Timer que se usa en un formulario o que lo usa otro componente.Begins the run-time initialization of a Timer that is used on a form or by another component.

Close() Close() Close() Close()

Libera los recursos que usa Timer.Releases the resources used by the Timer.

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

Libera todos los recursos que usa Component.Releases all resources used by the Component.

(Inherited from Component)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Libera todos los recursos que usa la clase Timer actual.Releases all resources used by the current Timer.

EndInit() EndInit() EndInit() EndInit()

Finaliza la inicialización en tiempo de ejecución de un objeto Timer que se usa en un formulario o que lo usa otro componente.Ends the run-time initialization of a Timer that is used on a form or by another component.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type) GetService(Type) GetService(Type) GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
Start() Start() Start() Start()

Empieza a generar el evento Elapsed al establecer Enabled en true.Starts raising the Elapsed event by setting Enabled to true.

Stop() Stop() Stop() Stop()

Deja de generar el evento Elapsed al establecer Enabled en false.Stops raising the Elapsed event by setting Enabled to false.

ToString() ToString() ToString() ToString()

Devuelve una String que contiene el nombre del Component, si existe.Returns a String containing the name of the Component, if any. Este método no se debe invalidar.This method should not be overridden.

(Inherited from Component)

Eventos

Disposed Disposed Disposed Disposed

Se produce cuando el componente se elimina mediante una llamada al método Dispose().Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)
Elapsed Elapsed Elapsed Elapsed

Se produce cuando transcurre el intervalo.Occurs when the interval elapses.

Se aplica a

Seguridad para subprocesos

Todos los miembros públicos static miembros de este tipo son seguros para subprocesos.Any public static members of this type are thread safe. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.Any instance members are not guaranteed to be thread safe.

Consulte también: