Controlar la ejecución de threads.

07/07/2005 - 11:37 por carlos | Informe spam
Hola a todos, mi problema es el siguiente.
Tengo un modulo que carga una serie de datos con lo que la pantalla se queda
bloqueda hasta que termina la carga, la solución que encontre es lanzar un
hilo para evitar el bloqueo pero claro el problema llega que quiero saber
cuando el thread a terminado su ejecución.
Hay una propiedad IsAlive que indica si esta en ejecucion pero no me
resuelve el problema ya que para poder comprobar si esta vivo lo tengo que
introducir en un bloque de un evento.
hay algun delegado que notifique los cambios de estado de del hilo.
Grascias por todo.
Carlos.
 

Leer las respuestas

#1 A.Poblacion
07/07/2005 - 12:12 | Informe spam
"carlos" wrote in message
news:
Hola a todos, mi problema es el siguiente.
Tengo un modulo que carga una serie de datos con lo que la pantalla se


queda
bloqueda hasta que termina la carga, la solución que encontre es lanzar un
hilo para evitar el bloqueo pero claro el problema llega que quiero saber
cuando el thread a terminado su ejecución.
Hay una propiedad IsAlive que indica si esta en ejecucion pero no me
resuelve el problema ya que para poder comprobar si esta vivo lo tengo que
introducir en un bloque de un evento.
hay algun delegado que notifique los cambios de estado de del hilo.



Lo más sencillo es que crees una variable booleana y la inicialices a
false. En la rutina del thread, justo antes de terminar, pones a true la
variable. Y en el programa principal examinas la variable y cuando tenga un
true significa que el thread ha terminado.

Si quieres notificar la terminación de thread con un delegado, tienes que
declarar tú mismo el delegado, e invocarlo al final de la rutina del thread.

Si no quieres hacer lo anterior y quieres que el framework lo haga por
tí, entonces puedes usar la denominada "ejecución asíncrona" en lugar de
crear tú mismo el thread. Lo que se hace es meter en una subrutina el código
del thread (ya lo debes tener así porque sino no puedes crear el Thread),
crear un delegado que apunte a ella, y ejecutar el delegado con su método
BeginInvoke. Este método ya crea un thread separado y comienza a ejecutarlo,
y lleva un argumento para ponerle un callback, al cual te llama cuando
termine el hilo.

Preguntas similares