2009-01-06 10 views
19

La forma abreviada de esta pregunta: ¿Cuándo, si alguna vez, es conveniente utilizar el Forms.Timer en una aplicación Windows Forms multiproceso?Threading.Timer vs Forms.Timer

Más específicamente, estoy diseñando una aplicación que usa múltiples System.Threading.Timers para iniciar procesos de forma asíncrona, verificar las colas que contienen los resultados de esos procesos asincrónicos y actualizar las estadísticas que se mostrarán en el formulario principal de la aplicación.

En una aplicación como esa, ¿es apropiado usar un Forms.Timer para comprobar realmente las estadísticas de la aplicación y dibujarlas en el formulario principal o simplemente eso le daría una llave al funcionamiento sin problemas de la aplicación?

Respuesta

23

Forms.Timer registra el contador de tiempo para enviar un mensaje cuando suene la alarma. El evento planteado se trata como un evento GUI. System.Threading.Timer usa un enfoque de bloqueo de hilos. Básicamente, debe usar Forms.Timer para los temporizadores orientados a la GUI (para agregar algunos efectos a la interfaz de usuario) y Threading.Timer para programar tareas y otras cosas.

+0

De acuerdo con el artículo mencionado por David en Dakota abajo, el Forms.Timer envía un evento cuando suene la alarma ** y ** si la interfaz de usuario no está ya ocupado ** y * * se ejecuta en el hilo de Formulario. Hace algo del trabajo de sincronización y la llamada cruzada para usted. – Suncat2000

13

MSDN tenía una comparison article que hace la justicia tema.

+2

artículo decente. A los efectos de esta discusión, sería bueno si resumir las diferencias entre los dos (Threading.Timer requiere sincronización, pero proporciona más control, Forms.Timer no generará necesariamente un evento para cada tic, etc.) – Shog9

+1

Excelente. En mi montón de "leer" que va. –

+0

@ t3rse: el enlace está muerto :( –

2

estoy de acuerdo con lo que dijo Mehrdad y David, pero debe ser consciente de que los temporizadores no ofrecen ninguna garantía de puntualidad o la orden o ejecución. Demasiados temporizadores y la aplicación simplemente pasar ;-)

+0

Tanto sabía. En esta arquitectura particular, no se requiere ni un orden determinista de ejecución ni una puntualidad particular. –

Cuestiones relacionadas