Wednesday, November 28, 2007

Threads en WinForm con Invoke

Cuando trabajas con Windows Forms todo es maravilloso. Pues la misma tecnologia esta orientada hacia una mayor interactividad con el usuario y el producto de software.

Asunto que en el desarrollo de aplicaciones web y ASP.NET se viene superando gracias al aporte de AJAX.

Sin embargo, dentro del mundo de Windows Forms tenemos ciertos retos, así le gusta calificar las dificultades a Frank Alexander Van Ede.

Uno de estos retos sucita cuando te encuentras con ciertas operaciones, tras el click del usuario, que han de tomar un tiempo prolongado y que ha la vez van pintando informacion en el front-end. Hablamos de varios segundos e inclusive algunos minutos.

Ante esta situacion, si se sigue realizando la programación de forma tradicional, pues te percataras que tu aplicativo empieza a tener un LAG, todo empieza a pintarse de blanco y el software ya no responde a las acciones del usuario. ¿Que hacer?

La solucion inmediata pasar por utilizar los Threads.

Sin embargo al usar los Threads, el mayor reto esta enviar los resultados parciales que va obteniendo esta supuesta operacion lenta y parsimoniosa hacia el front-end teniendo como destino muy probablemente un DataGrid u otro control, cuales quiera que sea. Ese es el meollo del asunto.

Recordemos que nuestro aplicativo WinForm se ejecuta en un espacio de memoria. Y un Thread se ejecuta en un espacio de memoria distinto, a pesar que este haya sido inicializado desde el WinForm. Cada Thread crea su propio espacio de memoria y se ejecuta en este.

Entonces el gran reto es, enviar resultados parciales de una operacion que se encuentra en su propio espacio de memoria distinto, hacia un control de usuario que se haya dentro de otro espacio de memoria, el del aplicativo.

Los Delegates son la solucion para este reto. Una especie de Broker que debe implementarse con la intención de ser el nexo entre ambos espacios de memoria.

El Thread notificará a traves de un Delegate una acción con ciertos datos y del lado del espacio de memoria del aplicativo nos suscribiremos al Delegate de dicho Thread con la intención de coger los datos que nos envien.

Al momento de asignar estos resultados parciales al control de usuario que hayamos decidido utilizar para mostrar los datos, debemos procurar llamar al metodo Invoke.

Blogueando y Posteando en mi blog

Hace mucho que no escribo en este blog. Y me causa algo de pena, pues este es mi primer blog. La primera vez que postee, fué aquí. Y tu sabes que la primera vez nunca se olvida ¿verdad?

En fin, me da curiosidad por entender que sucede. ¿A que se debe que posteo más seguido en mi blog (perú) Javier Luna blog sobre derecho y asuntos legales, que en este blog?

Mi blog (beta) Javier Luna blog sobre asuntos sociales, futbol, musica, u otros de mi interes y afines, es donde posteo más seguido, que en mi primer blog. No puede ser.

Lo más curioso de todo es que este blog, esta asociado a mi profesión. En teoría, deberia ser el lugar donde realize mayores aportes. Y al saber que no es así, me lastima.

Debo hacer un mea culpa y procurar postear en este, mi primer blog, con algo más de frecuencia o por lo menos no dejarlo en abandono. Hagamos eso.