Timer Clase
Collapse the table of content
Expand the table of content
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

Timer (Clase)

 

Publicada: julio de 2016

Genera un evento después de un intervalo establecido, con la opción de generar eventos recurrentes.

Para examinar el código fuente de .NET Framework para este tipo, vea la Reference Source.

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


[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class Timer : Component, ISupportInitialize

NombreDescripción
System_CAPS_pubmethodTimer()

Inicializa una nueva instancia de la clase Timer y establece todas las propiedades en sus valores iniciales.

System_CAPS_pubmethodTimer(Double)

Inicializa una nueva instancia de la clase Timer y establece la propiedad Interval en el número de milisegundos especificado.

NombreDescripción
System_CAPS_pubpropertyAutoReset

Obtiene o establece un valor booleano que indica si Timer debe generar el evento Elapsed solo una vez (false) o repetidamente (true).

System_CAPS_protpropertyCanRaiseEvents

Obtiene un valor que indica si el componente puede provocar un evento.(Heredado de Component.)

System_CAPS_pubpropertyContainer

Obtiene IContainer que contiene Component.(Heredado de Component.)

System_CAPS_protpropertyDesignMode

Obtiene un valor que indica si la Component está actualmente en modo de diseño.(Heredado de Component.)

System_CAPS_pubpropertyEnabled

Obtiene o establece un valor que indica si Timer debe generar el evento Elapsed.

System_CAPS_protpropertyEvents

Obtiene la lista de controladores de eventos que se adjuntará a este Component.(Heredado de Component.)

System_CAPS_pubpropertyInterval

Obtiene o establece el intervalo, expresado en milisegundos, en el que se generará el evento Elapsed.

System_CAPS_pubpropertySite

Esta API admite la infraestructura de product y no está pensada para usarse directamente desde su código. Obtiene o establece el sitio que enlaza el objeto Timer a su contenedor en modo de diseño.(Reemplaza a Component.Site).

System_CAPS_pubpropertySynchronizingObject

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.

NombreDescripción
System_CAPS_pubmethodBeginInit()

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.

System_CAPS_pubmethodClose()

Libera los recursos que usa Timer.

System_CAPS_pubmethodCreateObjRef(Type)

Crea un objeto que contiene toda la información pertinente necesaria para generar a un proxy utilizado para comunicarse con un objeto remoto.(Heredado de MarshalByRefObject.)

System_CAPS_pubmethodDispose()

Libera todos los recursos usados por Component.(Heredado de Component.)

System_CAPS_protmethodDispose(Boolean)

Esta API admite la infraestructura de product y no está pensada para usarse directamente desde su código. Libera todos los recursos que usa la clase Timer actual.(Reemplaza a Component.Dispose(Boolean)).

System_CAPS_pubmethodEndInit()

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.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object.)

System_CAPS_protmethodFinalize()

Libera recursos no administrados y realiza otras operaciones de limpieza antes de que se reclame el elemento Component durante la recolección de elementos no usados.(Heredado de Component.)

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object.)

System_CAPS_pubmethodGetLifetimeService()

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.(Heredado de MarshalByRefObject.)

System_CAPS_protmethodGetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.(Heredado de Component.)

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.(Heredado de MarshalByRefObject.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Crea una copia superficial del actual MarshalByRefObject objeto.(Heredado de MarshalByRefObject.)

System_CAPS_pubmethodStart()

Empieza a generar el evento Elapsed al establecer Enabled en true.

System_CAPS_pubmethodStop()

Deja de generar el evento Elapsed al establecer Enabled en false.

System_CAPS_pubmethodToString()

Devuelve un String que contiene el nombre de la Component, si existe. Este método no se debe invalidar.(Heredado de Component.)

NombreDescripción
System_CAPS_pubeventDisposed

Se produce cuando el componente se elimina mediante una llamada a la Dispose (método).(Heredado de Component.)

System_CAPS_pubeventElapsed

Se produce cuando transcurre el intervalo.

System_CAPS_noteNota

Para ver el código fuente de .NET Framework para este tipo, consulte el Reference Source. Puede examinar el código fuente en línea, descargue la referencia para verla sin conexión y recorrer (incluidas las revisiones y actualizaciones) durante la depuración; see instructions.

El Timer componente es un temporizador basado en servidor que genera un Elapsed evento en la aplicación después del número de milisegundos en la Interval ha transcurrido la propiedad. Puede configurar la Timer objeto para generar el evento de una sola vez o varias veces utilizando la AutoReset propiedad. Normalmente, un Timer objeto se declara en el nivel de clase para que permanezca en el ámbito siempre que sea necesario. A continuación, puede controlar su Elapsed eventos para proporcionar el procesamiento normal. Por ejemplo, suponga que tiene un servidor crítico que debe mantenerse ejecuta 24 horas al día, 7 días a la semana. 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. Si el sistema no responde, el servicio podría intentar reiniciar el servidor o notificar a un administrador.

System_CAPS_importantImportante

La Timer clase está disponible en .NET Framework solo. No se incluye en la biblioteca estándar de .NET y no está disponible en otras plataformas, como .NET Core o la plataforma Universal de Windows. En estas plataformas, así como para la portabilidad entre todas las plataformas. NET, debe utilizar el System.Threading.Timer clase en su lugar.

Este tipo implementa la IDisposable interfaz. Cuando haya terminado de utilizar el tipo, debería eliminar, directa o indirectamente. Para deshacerse del tipo directamente, llame a su Dispose método en un try/catch bloque. Para deshacerse de él indirectamente, usar una construcción de lenguaje como using (en C#) o Using (en Visual Basic). Para obtener más información, consulte la sección "Uso de un objeto que implementa IDisposable" en el IDisposable tema de la interfaz.

Basado en el servidor System.Timers.Timer clase está diseñada para su uso con subprocesos de trabajo en un entorno multiproceso. Temporizadores de servidor pueden desplazarse entre subprocesos para controlar presionado Elapsed evento, lo más precisión que los temporizadores de Windows en generar el evento de tiempo.

El System.Timers.Timer componente genera el Elapsed eventos, en función del valor (en milisegundos) de la Interval propiedad. Puede controlar este evento para realizar el procesamiento que es necesario. Por ejemplo, suponga que tiene una aplicación de ventas en línea que envía continuamente pedidos de ventas a una base de datos. El servicio que compila las instrucciones de envío funciona con lotes de pedidos, en lugar de procesar cada pedido individualmente. Puede utilizar un Timer para iniciar la cada 30 minutos de procesamiento por lotes.

System_CAPS_importantImportante

La clase System.Timers.Timer tiene la misma resolución que el reloj del sistema. 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. Para obtener más información, vea la propiedad Interval.

Cuando AutoReset se establece en false, un System.Timers.Timer objeto provoca la Elapsed eventos solo una vez, después de la primera Interval ha transcurrido. Para mantener la Elapsed eventos periódicamente en el intervalo definido por el Interval, establezca AutoReset a true, que es el valor predeterminado.

El Timer componente detecta y suprime todas las excepciones producidas por controladores de eventos para el Elapsed eventos. Este comportamiento está sujeta a cambios en futuras versiones de .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 el await (operador) (en C#) o Await (operador) (en Visual Basic). Las excepciones iniciadas en estos controladores de eventos se propagan hacia el subproceso que realiza la llamada, como se muestra en el ejemplo siguiente. Para obtener más información sobre las excepciones producidas en los métodos asincrónicos, vea Control de excepciones (Task Parallel Library).

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

Si el SynchronizingObject propiedad es null, el Elapsed evento se desencadena en un ThreadPool subproceso. Si el procesamiento de la Elapsed evento dura más de Interval, el evento puede provocarse de nuevo en otro ThreadPool subproceso. En esta situación, el controlador de eventos debe ser de reentrada.

System_CAPS_noteNota

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 la Enabled propiedad false. Esto puede ocasionar la Elapsed eventos provocados cuando se haya detenido el temporizador. El código de ejemplo para el Stop método muestra una forma de evitar esta condición de carrera.

Incluso si SynchronizingObject no null, Elapsed eventos pueden producirse después de la Dispose o Stop ha llamado al método o después el Enabled se ha establecido la propiedad en false, porque la señal para generar el Elapsed eventos siempre está en cola para su ejecución en un subproceso del grupo. Una manera de resolver esta condición de carrera es establecer una marca que indica el controlador de eventos para el Elapsed eventos para pasar por alto eventos posteriores.

Si utiliza la System.Timers.Timer clase con un elemento de la interfaz de usuario, como un formulario o control, sin colocar el temporizador en ese elemento de la interfaz de usuario, asignar el formulario o control que contiene el Timer a la SynchronizingObject propiedad, por lo que se calculan las referencias del evento al subproceso de interfaz de usuario.

Para obtener una lista de valores de propiedad predeterminados para una instancia de Timer, consulte el Timer constructor.

System_CAPS_tipSugerencia

Tenga en cuenta que la biblioteca de clases de .NET Framework incluye cuatro clases denominadas Timer, cada una de lo que ofrece una funcionalidad diferente:

  • System.Timers.Timer (este tema): desencadena un evento a intervalos regulares. La clase está diseñada para usarla como basado en servidor o componente del servicio en un entorno multiproceso; no tiene ninguna interfaz de usuario y no está visible en tiempo de ejecución.

  • System.Threading.Timer: ejecuta un método de devolución de llamada única en un subproceso de grupo a intervalos regulares. Se define el método de devolución de llamada cuando el temporizador, se crea una instancia y no se puede cambiar. Como el System.Timers.Timer (clase), esta clase está pensada para su uso como un componente basado en servidor o el servicio en un entorno multiproceso; no tiene ninguna interfaz de usuario y no es visible en tiempo de ejecución.

  • System.Windows.Forms.Timer: un componente de formularios Windows Forms que se desencadena un evento a intervalos regulares. El componente no tiene ninguna interfaz de usuario y está diseñado para su uso en un entorno de un solo subproceso.

  • System.Web.UI.Timer: un componente de ASP.NET que realiza devoluciones de página web asincrónicas o sincrónicas a intervalos regulares.

En el ejemplo siguiente se crea un System.Timers.Timer objeto que desencadena su Timer.Elapsed evento cada dos segundos (2.000 milisegundos), configura un controlador de eventos para el evento e inicia el temporizador. El controlador de eventos muestra el valor de la ElapsedEventArgs.SignalTime propiedad cada vez que se genera.

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

.NET Framework
Disponible desde 1.1

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

Volver al principio
Mostrar:
© 2016 Microsoft