SerialPort y Formularios

10/01/2008 - 13:31 por Plextor | Informe spam
Hola, a ver si alguien me puedo echar un cable

Tengo un formulario principal con un SerialPort haciendo polling a un
COM. En dicho formulario también tengo el correspondiente delegado de
recepciones de tramas.

Desde dicho formulario puedo abrir otro Form en el cual también quiero
que (bajo petición) pueda enviar tramas y recibir tramas.

¿Existe alguna manera elegante de realizar esta tarea? Yo, hasta ahora
lo que hacía era pasarle por referencia el SerialPort a el nuevo
formulario y crear en este nuevo formulario un delegado de evento. Pero
no sé si es la mejor opción la de crear y destruir delegados de eventos
cada vez que abro y cierro este form.

¿Alguien tiene alguna sugerencia o ejemplo de hacerlo?

Un saludo,
Plextor
 

Leer las respuestas

#1 RFOG
11/01/2008 - 19:07 | Informe spam
Hola.

La forma más correcta desde el punto de vista de un sistema en tiempo real
es que dicho componente resida en un hilo independiente de la aplicación y
que la actualización de la UI la hagas mediante llamadas a Invoke. De esa
forma aíslas el control del puerto serie de cualquier cosa y te facilita el
control síncrono o asíncrono del mismo.

Ahora bien, muchas veces no merece la pena el esfuerzo... Y la forma en que
lo haces pienso que es la más correcta, salvo que podrías llegar a perder
alguna recepción... Una variante que se me ocurre es que crees una clase
global estática (¡Variables globales normales para C# YAAAAAAAAAAAAAA!) que
encapsule el puerto serie a la que le pases una referencia a la ficha activa
en ese momento y que sea esa clase la que invoque el delegado de cada ficha
dependiendo de cuál le hayas indicado.

Otra forma es que tengas ambos delegados instalados y un bool en cada ficha
que esté a true cuando dicha ficha esté activa, es decir

class Ficha1
{
Ficha1Delegado()
{
if(estoyActiva)
{
}
}
}

class Ficha2
{
Ficha2Delegado()
{
if(estoyActiva)
{
}
}
}

Podría valerte la propiedad de Active o Visible de la propia ficha.

El único inconveniente aquí sería la invocación de dos delegados ante cada
evento del puerto...


"Plextor" wrote in message
news:
Hola, a ver si alguien me puedo echar un cable

Tengo un formulario principal con un SerialPort haciendo polling a un COM.
En dicho formulario también tengo el correspondiente delegado de
recepciones de tramas.

Desde dicho formulario puedo abrir otro Form en el cual también quiero que
(bajo petición) pueda enviar tramas y recibir tramas.

¿Existe alguna manera elegante de realizar esta tarea? Yo, hasta ahora lo
que hacía era pasarle por referencia el SerialPort a el nuevo formulario y
crear en este nuevo formulario un delegado de evento. Pero no sé si es la
mejor opción la de crear y destruir delegados de eventos cada vez que abro
y cierro este form.

¿Alguien tiene alguna sugerencia o ejemplo de hacerlo?

Un saludo,
Plextor



Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación
El amor es ciego.

Preguntas similares