Conocer cuando una hebra termina

28/05/2008 - 12:38 por [Juanjo] | Informe spam
Hola grupo:

Tengo un problemilla con la hebras y C# (VS2005) y es que quiero saber
cuando una hebra termina la
ejecución de lo que este haciendo.

Hay algun evento, funcion o lo que sea que se ejecuta cuando una hebra
termina la funcion que tiene que ejecutar?

Gracias.

Preguntas similare

Leer las respuestas

#6 [Juanjo]
28/05/2008 - 19:23 | Informe spam
Muchas gracias, creo que es la mejor solucion de las que he visto. Voy a
probarlo.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:
"[Juanjo]" wrote in message
news:
Me he explicado mal, cuando me refiero a que el hilo principal termina no
queria decir "cerrar la aplicacion o
formulario". Lo que ocurre es que mientras el hilo que carga los datos
esta "trabajando" el usuario puedo seguir
tocando los botones, listas, datagrid, etc, del formulario que es lo que
quiero evitar, es decir, que mientras
se cargan los datos, no se pueda tocar nada del programa, el unico
control que debe funcionar es la barra de
progreso.

Lo de la barra de progreso lo hago como tu indicas con el Invoke, ya
sabia que no podia "accede" a un
control desde un proceso que no lo ha creado.



Podrías poner ".Enabled=false" en todos los controles del formulario
cuando lances el proceso de background, y cuando éste termine (puedes
poner una llamada de función al final de la rutina que lo ejecuta) volver
a poner true en el .Enabled.

Respuesta Responder a este mensaje
#7 Andres Aguirre
04/06/2008 - 16:31 | Informe spam
Hola Juanjo, creo que tu solucion esta en el componente "BackGroundWorker"
este componente proporcionado por el framework, te sera muy util.

*Que nos ofrece ??
El BackGroundWorker te permite ejecutar un proceso en segundo plano como
cargas de archivos, consultas sql y muchas otras cositas. Este componente te
deja la interfaz libre para seguir siendo usada. Dispones de eventos que se
lanzan segun el estado del proceso. Ademas dispones de la posibilidad de
actualizar una barra de progreso usando el porcentaje de resolucion que lleva
el proceso ...

*Que eventos tiene ??
Dispones de 3 eventos: DoWork (este evento es lanzado cuando inicias el
proceso con RunWorkerAsync), ProgressChanged (cuando el estado del proceso
cambia "sirve para una barra de progreso") y RunWorkerCompleted (se lanza
cuando el proceso a finalizado)

* donde encuentro el componente ??
El componente lo podes encontrar en la barra de herramientas y lo arrastras
hasta el formulario.

* Como lo uso ??
Una ves incorporado el componente en tu formulario, en el evento DoWork
pones el llamado al metodo que quieres ejecutar en segundo plano asi:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Este metodo se ejecuta en BackGround
this.MiMetodo();
}

y en el evento RunWorkerCompleted pones el codigo que quieres que se ejecute
despues de haber finalizado el proceso asi:

private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
// Este metodo se ejecuta al completar el proceso
messagebox.show("Listo el pollo pelada la gallina");
}

y puedes usar el evento ProgressChanged para actualizar un una barra de
progreso por ejemplo asi:
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.miProgressBar.Value = e.ProgressPercentage;
}


Puedes obtener mucha mas informacion en este enlace:
http://msdn.microsoft.com/es-es/library/c8dcext2(VS.80).aspx


Saludos y suerte

Andres Aguirre
Cordoba - Argentina
Respuesta Responder a este mensaje
#8 [Juanjo]
12/06/2008 - 23:49 | Informe spam
muchas gracias, me parece muy interesante, lo mirare.

"Andres Aguirre" escribió en el
mensaje de noticias:

Hola Juanjo, creo que tu solucion esta en el componente
"BackGroundWorker"
este componente proporcionado por el framework, te sera muy util.

*Que nos ofrece ??
El BackGroundWorker te permite ejecutar un proceso en segundo plano como
cargas de archivos, consultas sql y muchas otras cositas. Este componente
te
deja la interfaz libre para seguir siendo usada. Dispones de eventos que
se
lanzan segun el estado del proceso. Ademas dispones de la posibilidad de
actualizar una barra de progreso usando el porcentaje de resolucion que
lleva
el proceso ...

*Que eventos tiene ??
Dispones de 3 eventos: DoWork (este evento es lanzado cuando inicias el
proceso con RunWorkerAsync), ProgressChanged (cuando el estado del proceso
cambia "sirve para una barra de progreso") y RunWorkerCompleted (se lanza
cuando el proceso a finalizado)

* donde encuentro el componente ??
El componente lo podes encontrar en la barra de herramientas y lo
arrastras
hasta el formulario.

* Como lo uso ??
Una ves incorporado el componente en tu formulario, en el evento DoWork
pones el llamado al metodo que quieres ejecutar en segundo plano asi:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Este metodo se ejecuta en BackGround
this.MiMetodo();
}

y en el evento RunWorkerCompleted pones el codigo que quieres que se
ejecute
despues de haber finalizado el proceso asi:

private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
// Este metodo se ejecuta al completar el proceso
messagebox.show("Listo el pollo pelada la gallina");
}

y puedes usar el evento ProgressChanged para actualizar un una barra de
progreso por ejemplo asi:
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.miProgressBar.Value = e.ProgressPercentage;
}


Puedes obtener mucha mas informacion en este enlace:
http://msdn.microsoft.com/es-es/library/c8dcext2(VS.80).aspx


Saludos y suerte

Andres Aguirre
Cordoba - Argentina
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida