visual timers tick studio net form cronometro c# .net winforms c#-4.0 timer

c# - timers - ¿El System.Windows.Forms.Timer se ejecuta en un hilo diferente al de la interfaz de usuario?



timers timer vb net (5)

Tengo un hilo principal que crea un objeto de formulario que crea y configura un temporizador para ejecutar una función llamada updateStatus () cada minuto. Pero updateStatus () también es llamado por el hilo principal en varios lugares.

Sin embargo, no tengo claro si causará o no algún problema de sincronización. ¿Se ejecuta System.Windows.Forms.Timer en C # en un subproceso diferente que no sea el principal?


El temporizador Windows.Forms vuelve a provocar el evento en el subproceso de la interfaz de usuario, presumiblemente a través del contexto de sincronización.

Si desea un subproceso que no sea de UI, hay otros temporizadores, por ejemplo, System.Timers.Timer o System.Threading.Timer


No, el bucle de mensaje emite el evento Tick del temporizador cuando recibe un mensaje WM_TIMER. Siempre es bueno con eso, solo puede ejecutarse cuando el subproceso de la interfaz de usuario está inactivo.


No, los eventos del temporizador se generan en el subproceso de la interfaz de usuario.

No tendrás ningún problema de sincronicidad. Esta es la versión correcta del control del temporizador para usar en una aplicación WinForms; Está diseñado específicamente para hacer lo que estás pidiendo. Se implementa bajo el capó utilizando un temporizador estándar de Windows .

La documentation confirma esto en la sección de Comentarios:

Un temporizador se utiliza para generar un evento en intervalos definidos por el usuario. Este temporizador de Windows está diseñado para un entorno de un solo subproceso donde se utilizan subprocesos de interfaz de usuario para realizar el procesamiento. Requiere que el código de usuario tenga una bomba de mensajes de UI disponible y siempre opere desde el mismo hilo, o marque la llamada en otro hilo.

Cuando use este temporizador, use el evento Tick para realizar una operación de sondeo o para mostrar una pantalla de bienvenida durante un período de tiempo específico. Cuando la propiedad Enabled se establece en true y la propiedad Interval es mayor que cero, el evento Tick se genera en intervalos basados ​​en la configuración de la propiedad Interval.


No.

El punto central de un temporizador de Windows.Forms es que se ejecuta en el subproceso de la GUI.

Windows (WinForms) ejecuta algo llamado MessagePump (vea Application.Run() ) y esto es lo que hace que el temporizador sea posible.

Todo su código se ejecuta como parte de un Eventhandler de alguna manera, y un tic Timer nunca "interrumpirá" ningún otro controlador de eventos.


Según la documentation se ejecuta en el hilo principal de la interfaz de usuario:

Un temporizador se utiliza para generar un evento en intervalos definidos por el usuario. Este temporizador de Windows está diseñado para un entorno de un solo subproceso donde se utilizan subprocesos de interfaz de usuario para realizar el procesamiento. Requiere que el código de usuario tenga una bomba de mensajes de UI disponible y siempre opere desde el mismo hilo, o marque la llamada en otro hilo.