¿El Sistema.Windows.Los formularios.Temporizador de ejecutar en un subproceso diferente de la interfaz de usuario?

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

Sin embargo, no estoy claro sobre si será o no causar problemas de sincronización. ¿El Sistema.Windows.Los formularios.Temporizador en C# se ejecutan en un subproceso diferente a otros que el hilo principal?

InformationsquelleAutor user186246 | 2011-04-17

5 Kommentare

  1. 25

    No, el temporizador de eventos se producen en el subproceso de interfaz de usuario.

    Que no tendrás problemas de sincronía. Esta es la versión correcta del temporizador de control para su uso en una aplicación de WinForms; es específicamente diseñado para hacer lo que estás preguntando. Se implementa bajo el capó con un estándar de El temporizador de Windows.

    La documentación confirma esto en la sección de Observaciones:

    Un Temporizador se utiliza para elevar un evento definido por el usuario intervalos. Este temporizador de Windows está diseñado para un entorno de subproceso único donde los subprocesos de interfaz de usuario se utilizan para realizar el procesamiento. Se requiere que el código de usuario tiene una interfaz de usuario mensaje de la bomba disponible y siempre operan desde el mismo hilo, o de la jefa de la llamada en otro hilo.

    Al usar este temporizador, use el evento Tick para realizar una operación de sondeo o para mostrar una pantalla de inicio durante un período de tiempo especificado. Cuando se establece la propiedad Enabled a true y la propiedad de Intervalo es mayor que cero, el evento Tick se planteó en los intervalos especificados en la propiedad Interval.

    • Así que el temporizador de windows se está ejecutando en el hilo principal, será siempre sincrónica y no necesito poner bloqueo de cierre dentro de la función updateStatus (). Estoy en lo cierto?
    • Sí, eso es correcto. Se ejecuta como cualquier otro evento que se obtiene planteadas en el formulario, como el Paint o Load eventos. Usted no necesita de bloqueo en los controladores, ya sea.
  2. 9

    No, el paso del temporizador evento se genera desde el subproceso de interfaz de usuario por el bucle de mensajes cuando recibe un mensaje WM_TIMER. Siempre estás bien con eso, sólo se puede ejecutar cuando el subproceso de interfaz de usuario está inactivo.

  3. 6

    No.

    El punto entero de un Windows.Temporizador de formularios es que se ejecuta en la interfaz gráfica de usuario Hilo.

    Windows (WinForms) se ejecuta algo que se llama la MessagePump (ver Application.Run()) y esto es lo que hace que el Temporizador posible.

    Todo el código se ejecuta como parte de un Eventhandler de alguna manera, y un Temporizador de intervalo nunca ‘interrumpir’ cualquier otro controlador de eventos.

  4. 5

    El De Windows.Temporizador de formularios plantea el caso en el subproceso de interfaz de usuario, presumiblemente a través de la sincronización de contexto.

    Si quieres una no-subproceso de interfaz de usuario, hay otros temporizadores – por ejemplo el Sistema.Los temporizadores.Temporizador o de un Sistema.Las operaciones de roscado.Temporizador

    • No del todo. Utiliza los mensajes de windows, por lo que nunca deja el subproceso de interfaz de usuario.
  5. 2

    De acuerdo a la documentación se ejecuta en el principal subproceso de interfaz de usuario:

    Un Temporizador se utiliza para elevar un evento en
    definido por el usuario intervalos. Este Windows
    el temporizador está diseñado para una
    subproceso único ambiente donde la interfaz de usuario
    los hilos se utilizan para realizar
    de procesamiento. Se requiere que el usuario
    el código tiene una interfaz de usuario mensaje de la bomba disponible
    y siempre operan de la misma
    hilo, o de la jefa de la llamada en
    otro hilo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea