none
ejecutar simultaneamente 16 timers RRS feed

  • Pregunta

  • hola... necesito conectarme a un hardware que tiene 16 puertos, con cada uno de los cuales interactuo de forma simultanea, cambiando estados y recibiendo mensajes, y segun el estado voy alternando colores entre  ellos.. es decir tengo un panel que me muestra el puerto 0 y segun va cambiando mensajes y estados, lo voy coloreando dependiendo del estado. .... lo que me esta sucediendo, es que cuando los ejecuto.... la conexion a cada puerto se hace uno a uno y los ejecuta uno a uno,  y no todos al tiempo..... lo que necesito ver en la pantalla sera una especie de semaforos, pero solo veo una secuencia y debo esperar hasta que llegue al ultimo puerto y vuelva a empezar....... les agradezco si me pueden colaborar... gracias angela
    lunes, 15 de julio de 2019 5:43

Respuestas

  • Si los 16 puertos son puertos serie y te conectas con la clase SerialPort, usa el evento DataReceived. Este evento se dispara sobre un Thread distinto, por lo que todos ellos pueden dispararse a la vez y no se necesita ningún Timer.

    Puesto que los eventos se disparan en otro Thread, recuerda tomar las precauciones habituales siempre que se programa en multihilo. En particular, puesto que la interfaz de pantalla no se puede modificar desde otro hilo, asegúrate de que estás usando el ".Invoke" antes de cambiar esos "semáforos" que tienes en pantalla. Y claro, asegúrate de que el hilo principal (el que creó la pantalla) no está "ocupado" haciendo otra cosa, porque en ese caso el Invoke se queda bloqueado esperando a que el hilo principal lo atienda, y entonces se vuelve inútil el hecho de que los puertos estén usando el DataReceived en multihilo.

    lunes, 15 de julio de 2019 8:25
    Moderador

Todas las respuestas

  • puedes aportar el código actual para que te podamos ayudar ?
    lunes, 15 de julio de 2019 6:50
  • Si los 16 puertos son puertos serie y te conectas con la clase SerialPort, usa el evento DataReceived. Este evento se dispara sobre un Thread distinto, por lo que todos ellos pueden dispararse a la vez y no se necesita ningún Timer.

    Puesto que los eventos se disparan en otro Thread, recuerda tomar las precauciones habituales siempre que se programa en multihilo. En particular, puesto que la interfaz de pantalla no se puede modificar desde otro hilo, asegúrate de que estás usando el ".Invoke" antes de cambiar esos "semáforos" que tienes en pantalla. Y claro, asegúrate de que el hilo principal (el que creó la pantalla) no está "ocupado" haciendo otra cosa, porque en ese caso el Invoke se queda bloqueado esperando a que el hilo principal lo atienda, y entonces se vuelve inútil el hecho de que los puertos estén usando el DataReceived en multihilo.

    lunes, 15 de julio de 2019 8:25
    Moderador
  • muchas gracias... ya me funciono

    angela diaz

    martes, 16 de julio de 2019 5:46