Delegates, Invoke y Puerto Serial

29/09/2005 - 16:21 por Edwin Monsalve | Informe spam
Hola, estoy probando el nuevo control que maneja los puertos seriales que
viene en el VB 2005. Este control posee un evento que se dispara cada vez que
llegan datos al puerto serial y es aqui donde siempre se dispara la siguiente
excepcion cuando quiero colocar los datos en un textbox,
"Cross-thread operation not valid: Control 'TextBox1' accessed from a thread
other than the thread it was created on."
Investigando en internet dicen que este error es debido a que la recepcion
de datos funciona en un hilo diferente al de actualizacion de controles en
pantalla (textbo1.selectedtext) y que debo utilizar la funcion invoke o
beginvoke para mostrar los datos en el textbox.
He leido la ayuda de visual basic y no termino de entender muy bien los
conceptos de delegate e invoke y mucho menos implementarlos en mi programa
por lo que les agradeceria su ayuda.
 

Leer las respuestas

#1 Robin
03/10/2005 - 05:50 | Informe spam
Un Delegado no es mas que un Objeto asociado a la direccion en memoria de un
metodo
Los objetos (instancias) residen en la memoria junto con sus metodos
Cuando le pasas a un delegado la direccion de un metodo mediante AddressOf
el delegado ahora conoce la direccion de este(lo referencia) asi que despues
le puedes decir al delegado que comience la invocacion de este metodo
mediante beginvoke.
Hay objetos que aceptan delegados como propiedades para que se les pueda
extender la funcionalidad de una instancia en tiempo de ejecucion.
Un ejemplo de eso son los eventos.
AddHandler usa AddressOf para acceder a la ubicacion en memoria de metodos
o tambien le puedes pasar un delegado (es lo mismo)

Asi que los delegados son como PUNTEROS en C solo que son seguros
pues nunca usas aritmetica de PUNTEROS que te lleven a lugares de la memoria
que no quieres entrar. Mas bien trabajan solo con las referencias.

Robin Hernandez
Caracas - Venezuela

"Edwin Monsalve" <Edwin wrote in message
news:
Hola, estoy probando el nuevo control que maneja los puertos seriales que
viene en el VB 2005. Este control posee un evento que se dispara cada vez
que
llegan datos al puerto serial y es aqui donde siempre se dispara la
siguiente
excepcion cuando quiero colocar los datos en un textbox,
"Cross-thread operation not valid: Control 'TextBox1' accessed from a
thread
other than the thread it was created on."
Investigando en internet dicen que este error es debido a que la recepcion
de datos funciona en un hilo diferente al de actualizacion de controles en
pantalla (textbo1.selectedtext) y que debo utilizar la funcion invoke o
beginvoke para mostrar los datos en el textbox.
He leido la ayuda de visual basic y no termino de entender muy bien los
conceptos de delegate e invoke y mucho menos implementarlos en mi programa
por lo que les agradeceria su ayuda.

Preguntas similares