Ha pasado casi una semana desde mi último post, esto va mejorando
Muchos de nosotros conocemos las ventajas de utilizar threads durante el desarrollo de nuestra aplicación para mejorar su desempeño; con todo y que su programación es un poco más lenta debido a la construcción de métodos delegados (tema que veremos en breve), pero este inconveniente es ampliamente superado por las ventajas que nos proporcionan
Hace poco me encontré con un pequeño detalle, Utilizaba un Thread para ejecutar en segundo plano un proceso mediante el cual realizaba ciertas operaciones sobre la base de datos, mientras el usuario realizaba otras con mi aplicación; el problema surgía en que al terminar la ejecución del Thread necesitaba utilizas los datos que obtenía como resultado, cosa que originalmente hacía mediante el llamado a una función, pero me quede con la duda, ¿ existiría algún evento que me permitiera identificar el fin de la ejecución de un proceso?
Luego de un breve tiempo de investigación pude darme cuenta que este evento no existe nativamente, si estoy equivocado por favor avísenme, así que, ¿Por qué no darnos a la tarea de crear el nuestro?
Primero, dentro de clase, declaramos un tipo de dato Evento:
Private event FinThread ()
Y creamos un método que será lanzado por nuestro evento, en este caso:
Private sub Terminado()
Msgbox (“Fin de la ejecución del Thread”)
End Sub
Lo sé, es un método terriblemente básico, pero útil para el propósito del post, nosotros podemos incluir en él el código necesario para que sea útil a nuestra aplicación.
Ahora, lo que necesitamos es asociar nuestra función con el tipo de dato evento que hemos declarado, para eso nos servimos de la función AddHandler, cuyo propósito es precisamente
private sub Lanzar_Thread()
Dim Thr as thread()
Addhandler FinThread, AddressOf Terminado
Thr = new Thread(AddressOf EjecutarThread)
Thr.start()
End sub
Los Parámetros que recibe AddHAndler son la variable de tipo evento al que asociará nuestro método, y como segundo parámetro, la dirección en memoria de éste, algo similar a la función de un puntero, si han estudiado el lenguaje C entenderán mejor esta parte
Para Terminar, debemos hacer que el evento que hemos creado sea generado al termino de la ejecución del Thread, para eso nos valemos de la instrucción RaiseEvent
Public Sub EjecutarThread()
‘//////Código del Thread///////////7
RaiseEvent FinThread()
End Sub
Si se fijan, no llamamos el método “Terminado”, sino al tipo de dato evento que hemos asociado a su dirección; también, como algunos pueden imaginarlo, el RaiseEvent no necesariamente tiene que ir al final, sino que puede colocarse en el momento de la ejecución que lo consideren más adecuado
Nos vemos, ya saben, cualquier cosa que no haya quedado del todo clara por favor escríbanla en los comentarios