Thread finalizado

21/10/2004 - 23:56 por Alberto | Informe spam
Hola Grupo :D

Como se cuando un thread termino de hacer su trabajo y destruir el objeto
(Thread)?

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
22/10/2004 - 00:13 | Informe spam
Puedes consultar las propiedades IsAlive o ThreadState del propio Thread
para consultar si el mismo ha terminado o esta en ejecucion.

Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu


"Alberto" escribió en el mensaje
news:%
Hola Grupo :D

Como se cuando un thread termino de hacer su trabajo y destruir el objeto
(Thread)?





Respuesta Responder a este mensaje
#2 Rodrigo Corral [MVP]
22/10/2004 - 11:06 | Informe spam
Lo suyo es que en lugar de un hilo, uses una llamada asincrona. Creas un
delegado a el metodo que realiza la tarea, llamas a BeginInvoke, que tiene
una sobrecarga que permite un parametro WaitCallback de manera que el metodo
al que apunta es llamado cuando la llamada asincrona se completa.

using System;
public class MainClass
{
public delegate void HazAlgoDelegate();
public static void Main()
{
HacerCosas hc = new HacerCosas();
HazAlgoDelegate hazAlgoDel = new HazAlgoDelegate(hc.HazAlgo);
hazAlgoDel.BeginInvoke(new AsyncCallback(hc.TrabajoFinalizado), null);
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
//Tenemos que dar tiempo a que el el otro hilo haga cosas
System.Threading.Thread.Sleep(50000);
}
}

class HacerCosas
{
public void HazAlgo()
{
//Trabajo largo.
Console.WriteLine("Empiezo el trabajo largo");
System.Threading.Thread.Sleep(10000);
}
public void TrabajoFinalizado(IAsyncResult ar)
{
Console.WriteLine("Termine el trabajo largo");
}
}

Y aun mejor y más eficiente si usas el pool de hilos de .net!!!

Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#3 Alberto
22/10/2004 - 13:02 | Informe spam
Y por que usas el System.Threading.Thread.Sleep(50000); en el Main, eso no
"colgaria" la aplicacion esos milisegundos?
Yo lo que quuiero es hacer la tipica busqueda que se realiza en un thread
aparte y en el principal hay un Form chiquito que dice "buscando".



"Rodrigo Corral [MVP]" escribió en el mensaje
news:
Lo suyo es que en lugar de un hilo, uses una llamada asincrona. Creas un
delegado a el metodo que realiza la tarea, llamas a BeginInvoke, que tiene
una sobrecarga que permite un parametro WaitCallback de manera que el


metodo
al que apunta es llamado cuando la llamada asincrona se completa.

using System;
public class MainClass
{
public delegate void HazAlgoDelegate();
public static void Main()
{
HacerCosas hc = new HacerCosas();
HazAlgoDelegate hazAlgoDel = new HazAlgoDelegate(hc.HazAlgo);
hazAlgoDel.BeginInvoke(new AsyncCallback(hc.TrabajoFinalizado), null);
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
Console.WriteLine("Sigo haciendo cosas en el hilo principal...");
//Tenemos que dar tiempo a que el el otro hilo haga cosas
System.Threading.Thread.Sleep(50000);
}
}

class HacerCosas
{
public void HazAlgo()
{
//Trabajo largo.
Console.WriteLine("Empiezo el trabajo largo");
System.Threading.Thread.Sleep(10000);
}
public void TrabajoFinalizado(IAsyncResult ar)
{
Console.WriteLine("Termine el trabajo largo");
}
}

Y aun mejor y más eficiente si usas el pool de hilos de .net!!!

Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org



Respuesta Responder a este mensaje
#4 Rodrigo Corral [MVP]
24/10/2004 - 12:53 | Informe spam
Ese sleep solo tiene sentido en la aplicacioncilla esta para que de tiempo a
que el otro hilo que hemos lanzado alga algo antes de que se cierre al
aplicacion.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida