Pregunta sobre Thread

08/01/2010 - 03:40 por Darhas | Informe spam
Hola a todos

Tendo 2 Subrutinas que las ejecuto con Thread.
Me interesa que hasta que no termine el primer Thread (Hola1), no se ejecute
el segundo Thread (Hola2).
Creo que, con el código que os pongo abajo, lo consigo. El problema es que
no me muestra el programa, mejor dicho el FORM .
Si ejecuto el programa, hace las tareas pero el FORM no aparece.
¿Como puedo lanzar un Thread, que cuando termine, lance otro Thread? Y me
muestre el FORM claro ;)

Os pongo mi codigo
Thread newThread = new Thread(new ThreadStart(Hola1));
Thread newThread2 = new Thread(new ThreadStart (Hola2));
newThread.Start();
while (newThread.IsAlive) ;
newThread2.Start();
while (newThread2.IsAlive) ;
newThread.Join();
newThread2.Join();
CheckForIllegalCrossThreadCalls = false;

Un saludo y gracias a todos
Darhas
 

Leer las respuestas

#1 Alberto Poblacion
08/01/2010 - 08:45 | Informe spam
"Darhas" wrote in message
news:
Tendo 2 Subrutinas que las ejecuto con Thread.
Me interesa que hasta que no termine el primer Thread (Hola1), no se
ejecute
el segundo Thread (Hola2).



Lo más sencillo para conseguir esto es que al final de la subrutina
Hola1 pongas una llamada a Hola2, y te olvides de crear un segundo Thread.

Creo que, con el código que os pongo abajo, lo consigo. El problema es que
no me muestra el programa, mejor dicho el FORM .
Si ejecuto el programa, hace las tareas pero el FORM no aparece.



Tal como lo has escrito, lo que hace el programa es lanzar cada hilo y
dejar el hilo principal en un bucle apretadísimo consumiendo el 100% de la
CPU haciendo un polling al segundo hilo a ver si ha acabado. Mientras no
acaba ese hilo, el hilo principal no sigue adelante, y por tanto no hace lo
que tenga que hacer a continuación (que me imagino que será abrir el form,
aunque no lo muestras en el código que has puesto.

¿Como puedo lanzar un Thread, que cuando termine, lance otro Thread? Y me
muestre el FORM claro ;)



Yo lo haría al revés: Abriría primero el Form, y cuando esté abierto
(por ejemplo, dentro del evento Form_Load) lanzaría el hilo con Thread.Start
y ya está. El Thread puede llamar a una pequeña subrutina que dentro llame
primero a Hola1 y luego a Hola2, con lo cual la segunda no arranca hasta que
termine la primera.

Os pongo mi codigo
[...]
CheckForIllegalCrossThreadCalls = false;



Esto es un auténtico disparate. No se te ocurra poner a false el
CheckForIllegalCrossThreadCalls. Normalmente está a true, y es una medida de
seguridad para detectar las llamadas ilegales entre hilos (cuando el hilo
del thread intenta manipular el form). Si te saltas el control y haces esas
llamadas ilegales, de vez en cuando y de forma aleatoria y espontánea tu
programa fallará, y te resultará casi imposible reproducir el fallo para
depurarlo.

Preguntas similares