Detener Thread

21/02/2007 - 21:18 por Lazarte Federico | Informe spam
Estimados
Inicio un thread de la manera en un boton llamado "comenzar"

Thread oThread = new Thread(new ThreadStart(CargarArchivos));
oThread.Start();

ahora bien en un boton "detener" necesito poner codigo para detener
ese hilo, alguien sabe como se hace? desde el boton detener no tengo
acceso a metodos o propiedades del objeto oThread.
Muchas gracias.
Federico Lazarte

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
21/02/2007 - 22:58 | Informe spam
"Lazarte Federico" wrote in message
news:
Inicio un thread de la manera en un boton llamado "comenzar"

Thread oThread = new Thread(new ThreadStart(CargarArchivos));
oThread.Start();

ahora bien en un boton "detener" necesito poner codigo para detener
ese hilo, alguien sabe como se hace? desde el boton detener no tengo
acceso a metodos o propiedades del objeto oThread.



Bien, lo primero que necesitas es trasladar la variable oThread a una
ubicación que sea accesible desde el botón Detener. Una vez hecho eso,
detienes el thread mediante:

oThread.Interrupt();

Eso te genera una excepción dentro del thread del tipo
ThreadInterruptedException, que puedes interceptar ejecutando todo el código
del thread dentro de un try...catch.
Respuesta Responder a este mensaje
#2 Lazarte Federico
22/02/2007 - 14:23 | Informe spam
On Feb 21, 6:58 pm, "Alberto Poblacion" <earthling-
wrote:
"Lazarte Federico" wrote in message

news:

> Inicio un thread de la manera en un boton llamado "comenzar"

> Thread oThread = new Thread(new ThreadStart(CargarArchivos));
> oThread.Start();

> ahora bien en un boton "detener" necesito poner codigo para detener
> ese hilo, alguien sabe como se hace? desde el boton detener no tengo
> acceso a metodos o propiedades del objeto oThread.

Bien, lo primero que necesitas es trasladar la variable oThread a una
ubicación que sea accesible desde el botón Detener. Una vez hecho eso,
detienes el thread mediante:

oThread.Interrupt();

Eso te genera una excepción dentro del thread del tipo
ThreadInterruptedException, que puedes interceptar ejecutando todo el código
del thread dentro de un try...catch.



Gracias por tu respuesta, aun asi no logro que finalize, pues sigue
ejecutando el metodo. Este metodo lo que hace es escanear un
directorio, al presioanr el boton detener, sigue como si nada pasara.
Que puede estar fallando?.
Gracias.
Respuesta Responder a este mensaje
#3 RFOG
22/02/2007 - 15:29 | Informe spam
La solución "políticamente incorrecta" (y sin necesidad de que el botón
conozca el thread) es la de tener una variable en la clase que marque la
condición de finalización del hilo.

Alg así:

desde la ficha principal:

m_bTerminateThread=true;

y en el hilo:
while(!m_bTerminateThread)
{
... //dar caña
}

Yo también he tendio ese problema que comentas, en su momento lo solucioné
como te digo (en mi caso el tema estaba en que ese hilo se lanzaba en un
constructor estático y luego se hacía el sueco). Como un bool es una
variable atómica no hay problema de que el hilo la pille en mal estado, o
vale true o false.

Y que no se te olvide poner la condición de salida a cierto cuando termine
tu ficha o la aplicación, o vas a tener diversión.

"Lazarte Federico" escribió en el mensaje de
noticias news:
On Feb 21, 6:58 pm, "Alberto Poblacion" <earthling-
wrote:
"Lazarte Federico" wrote in message

news:

> Inicio un thread de la manera en un boton llamado "comenzar"

> Thread oThread = new Thread(new ThreadStart(CargarArchivos));
> oThread.Start();

> ahora bien en un boton "detener" necesito poner codigo para detener
> ese hilo, alguien sabe como se hace? desde el boton detener no tengo
> acceso a metodos o propiedades del objeto oThread.

Bien, lo primero que necesitas es trasladar la variable oThread a una
ubicación que sea accesible desde el botón Detener. Una vez hecho eso,
detienes el thread mediante:

oThread.Interrupt();

Eso te genera una excepción dentro del thread del tipo
ThreadInterruptedException, que puedes interceptar ejecutando todo el
código
del thread dentro de un try...catch.



Gracias por tu respuesta, aun asi no logro que finalize, pues sigue
ejecutando el metodo. Este metodo lo que hace es escanear un
directorio, al presioanr el boton detener, sigue como si nada pasara.
Que puede estar fallando?.
Gracias.
Respuesta Responder a este mensaje
#4 Alberto Poblacion
22/02/2007 - 19:36 | Informe spam
"RFOG" wrote in message
news:
Y que no se te olvide poner la condición de salida a cierto cuando termine
tu ficha o la aplicación, o vas a tener diversión.



Esto tiene remedio: Si antes de lanzar el thread le pones true en la
propiedad IsBackground, entonces termina automáticamente cuando sales de la
aplicación.
Respuesta Responder a este mensaje
#5 Alberto Poblacion
22/02/2007 - 19:39 | Informe spam
"Lazarte Federico" wrote in message
news:
Gracias por tu respuesta, aun asi no logro que finalize, pues sigue
ejecutando el metodo.



¿Qué le has puesto en el "catch"? Si sales de la función que inició el
hilo, el hilo termina. ¿Has probado a seguirlo con el debugger, a ver si
efectivamente entra en el catch cuando pulsas el botón de interrumpir?
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida