Terminar un thread

16/09/2004 - 18:36 por raul | Informe spam
hola

Estoy haciendo un programa que habre un formulario, y he creado un
thread, para que este escuchando un puerto en concreto. Me funciona bien,
pero cuando cierro el formulario, el ejecutable sige, voy al administrador
de tareas y sigue ahi. Yo creo que el error esta en que queda algun hilo
abierto, y por eso no se cierra ¿Como podria matar ese hilo?

El codigo es el siguiente:
private void app_Load(object sender, System.EventArgs e)
{
Thread thread=new Thread(new ThreadStart(recibirSocket));

thread.Start();

}

private void recibirSocket()

{

myServer=new IPEndPoint(myIP,Int32.Parse("20000"));

socket=new
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

socket.Bind(myServer);

socket.Listen(50);

while(true)

{

try

{

accSocket=socket.Accept();

if(accSocket.Connected)

{

Thread thread=new Thread(new ThreadStart(leerDatos));

thread.Start();


}

private void leerDatos()

{

Byte[]rec=new Byte[1024];

NetworkStream acceptStream=new NetworkStream(accSocket);

int i=0;

while((i=acceptStream.Read(rec,0,rec.Length))!= 0)

{

string recMessage=System.Text.Encoding.Default.GetString(rec);

rec=new Byte[1024];

txtRecibido.Text=recMessage;

}


}

Preguntas similare

Leer las respuestas

#6 Octavio Hernandez
17/09/2004 - 23:04 | Informe spam
Mark,

a) Los threads no tienen método Close() o Dispose(). Existe un Abort(), pero
lanza una excepción en el contexto del hilo a eliminar, que habría que
atrapar allí... Me parece que lo más adecuado es asignarle true a
IsBackground.
b) Ten en cuenta que al hacer esa llamada a GC.Collect() puedes "colgar" al
programa por unos instantes si hay mucha basura por eliminar... Lo
importante en el caso de los objetos que consumen recursos externos
(ficheros, sockets, imágenes...) es hacerles el "dispose" para que devuelvan
los recursos que consumen.

Slds - Octavio

"Mark Elmer" escribió en el mensaje
news:14a201c49c95$ed62ecc0$
cierra el thread, igualalo a null i pasale el recolector
de basura.
th.Close();
th=null;
GC.Collect();
a mi me pasó algo similar usando sockets.
hola

Estoy haciendo un programa que habre un formulario, y


he creado un
thread, para que este escuchando un puerto en concreto.


Me funciona bien,
pero cuando cierro el formulario, el ejecutable sige, voy


al administrador
de tareas y sigue ahi. Yo creo que el error esta en que


queda algun hilo
abierto, y por eso no se cierra ¿Como podria matar ese


hilo?

El codigo es el siguiente:
private void app_Load(object sender, System.EventArgs e)
{
Thread thread=new Thread(new ThreadStart(recibirSocket));

thread.Start();

}

private void recibirSocket()

{

myServer=new IPEndPoint(myIP,Int32.Parse("20000"));

socket=new
Socket


(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.
Tcp);

socket.Bind(myServer);

socket.Listen(50);

while(true)

{

try

{

accSocket=socket.Accept();

if(accSocket.Connected)

{

Thread thread=new Thread(new ThreadStart(leerDatos));

thread.Start();


}

private void leerDatos()

{

Byte[]rec=new Byte[1024];

NetworkStream acceptStream=new NetworkStream(accSocket);

int i=0;

while((i=acceptStream.Read(rec,0,rec.Length))!= 0)

{

string recMessage=System.Text.Encoding.Default.GetString


(rec);

rec=new Byte[1024];

txtRecibido.Text=recMessage;

}


}




.

Respuesta Responder a este mensaje
#7 ruvader41
13/07/2012 - 09:19 | Informe spam
A.Poblacion escribió el 17/09/2004 07:47 :
Ponle
thread.IsBackground=true;
Los threads de background terminan automáticamente cuando se cierran
todos
los threads que no son de background.



"raul" wrote in message
news:%
hola

Estoy haciendo un programa que habre un formulario, y he creado un
thread, para que este escuchando un puerto en concreto. Me funciona bien,
pero cuando cierro el formulario, el ejecutable sige, voy al administrador
de tareas y sigue ahi. Yo creo que el error esta en que queda algun hilo
abierto, y por eso no se cierra ¿Como podria matar ese hilo?

El codigo es el siguiente:
private void app_Load(object sender, System.EventArgs e)
{
Thread thread=new Thread(new ThreadStart(recibirSocket));

thread.Start();

}

private void recibirSocket()

{

myServer=new IPEndPoint(myIP,Int32.Parse("20000"));

socket=new
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

socket.Bind(myServer);

socket.Listen(50);

while(true)

{

try

{

accSocket=socket.Accept();

if(accSocket.Connected)

{

Thread thread=new Thread(new ThreadStart(leerDatos));

thread.Start();


}

private void leerDatos()

{

Byte[]rec=new Byte[1024];

NetworkStream acceptStream=new NetworkStream(accSocket);

int i=0;

while((i=acceptStream.Read(rec,0,rec.Length))!= 0)

{

string recMessage=System.Text.Encoding.Default.GetString(rec);

rec=new Byte[1024];

txtRecibido.Text=recMessage;

}


}




QUe simple pero realmente me funciono, tenia el mismo problema y enserio las soluciones que se me ocurrian o que veia en internet daban miedo Gracias por la información
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida