Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola,
A ver si algún entendido de C# (o lenguaje similar) me puede hechar una mano.
Lo que intento hacer es tener una clase que me genere un evento cuando recibo un paquete debidamente formateado por un socket específico o por el puerto serie.
Para ello abro un thread con una máquina de estados que me va mirando el puerto serie y el socket cada x tiempo y si ha llegado algo lo mete en un buffer de datos. Una vez que pasa un cierto tiempo (timeout) leo ese buffer y si el formato es correcto debería enviar un evento.
El problema es que no se cómo generar un evento en C#.
¿Alguna idea?
S2
Ranganok Schahzaman
Si nadie sabe ¿algún tutorial en castellano sobre C# o Mono que lo explicen en condiciones?
S2
Ranganok Schahzaman
Buff, estando de vacaciones no puedo atender a todo a su debido tiempo.
Tengo hecho algo parecido en C#, que cuando recibe paquetes formateados correctamente en ModBus sobre puerto serie, me genera eventos, pero no me acuerdo de cómo se hacen, ni de donde tengo el objeto (además, apenas paso por mi ordenador de casa, que estoy de vacaciones).
Si me das unos pocos días, miraré de conseguirte esa información. Así, a bote pronto, lo que tienes que hacer es poner un delegado (que es el 'apodo' que le vas a dar a la rutina de atención al evento) como público para invocarlo desde el thread en el que haces las comprobaciones... y algo más que no recuerdo. Por tanto, desde la magnífica ayuda del C# express puedes empezar a buscar el tema de delegados.
Si mal no me acuerdo, además te convendrá generar un par de objetos de comunicación (más bien, una estructura), más comunmente llamados EventArgs, para poder pasar los datos a la rutina que se asignará al delegado.
Si me das unos pocos días, miraré de conseguirte esa información. Te doy 3 semanas 😛 yo también acabo de activar el modo vacaciones....
Lo del delegado si que lo sabía, pero no he encontrado ningún ejemplo que te explique como hacerlo (al menos ninguno en castellano). La verdad es que si me puedes pasar el ejemplo me haces un gran favor.
S2
Ranganok Schahzaman
Hola:
He encontrado esto, pero aviso de dos cosas:
1º Los comentarios, escasos, no son ni de fiar, ni de fácil lectura debido al uso de un idioma no muy reconocido (alemán mediterráneo)
2º Está por acabar, pero tengo otras cosas prioritarias antes.
3º Si algún día funciona, esto se podría poner como tutorial o como información general, e incluso servir de base para algún proyecto que tengo por ahí parado (localización por multilateración de ultrasonidos) que está abierto a gente que se quiera apuntar.
4º Espero que te sirva de algo. Al fin y al cabo, parece sencillo de hacer, el tema de los eventos (definir un public event TipoDeEvento NombreEvento, y luego 'invokarlo' con NombreEvento(this,ArgumentosEvento);).
Have fun, y felices vacaciones.