2012-04-13 10 views
9

¿El evento transcurrido de System.Timers.Timer es efectivamente el mismo que el evento Tick de System.Windows.Forms.Timer?Evento transcurrido v Marque evento?

En circunstancias específicas, ¿hay ventajas de usar uno en lugar de otro?

+0

El 'System.Threading.Timer' es el único que funcionó para mí en' Windows Server 2008 R2' aunque Timers.Timer funcionó en mi 'portátil con Windows 7'. – Lijo

Respuesta

6

Consulte estos enlaces here y here para una comprensión completa de los temporizadores en .Net framework.

Hay tres tipos de temporizadores.

  • System.Windows.Forms.Timer
  • System.Timers.Timer
  • System.Threading.Timer

que personalmente prefiere System.Timers.Timer ya que es seguro para subprocesos.

+0

como soy un novato, necesito preguntar por qué los hilos del otro no son seguros? – whytheq

+1

@whytheq Thread-safe significa que las instancias de la clase System.Timers.Timer se pueden acceder de forma segura desde varios subprocesos. Otras clases de temporizador enfrentarán problemas en este caso. La seguridad de subprocesos es un problema común en aplicaciones multiproceso. Para una comprensión completa, lea esta serie de artículos. http://www.albahari.com/threading/ – ABH

+0

por lo que en términos de laymens, el temporizador sigue funcionando independientemente de qué otros hilos se estén ejecutando. – whytheq

11

Las otras respuestas proporcionan una gran cantidad de detalles, pero la diferencia primordial entre los dos temporizadores que usted ha mencionado es que el System.Windows.Forms.Timer invocará la devolución de llamada en el subproceso de interfaz de usuario, mientras que el System.Timers.Timer utilizará uno de los hilos de la piscina hilo de núcleo .

+0

Esa es una gran manera de decirlo. –

+0

... entonces 'System.Timers.Timer' es seguro para subprocesos mientras que el temporizador de formularios no? Y si deseo ejecutar procesos paralelos usando un temporizador para comenzar cada proceso, entonces 'System.Timers.Timer' es el mejor temporizador para usar? – whytheq

+0

Depende de sus requisitos de enhebrado. Si el código que está ejecutando el temporizador necesita modificar la GUI, entonces use el temporizador Forms. Además, dado que hay (normalmente) solo un hilo de evento, significa que el controlador de eventos del temporizador de formularios nunca se llamará al mismo tiempo (varias veces al mismo tiempo). Sin embargo, generalmente no debería realizar tareas relacionadas con la GUI en el hilo de la GUI (ya que hace que la GUI responda menos) para que el temporizador de Timers sea mejor, con la advertencia de que ahora es responsable de manejar la concurrencia. – SimonC

Cuestiones relacionadas