Unable to Abort a listening thread

  • Thread starter Thread starter MuZZy
  • Start date Start date
M

MuZZy

HI,

As i posted below i have an app with a separate thread listening for a tcp client connection.
In the simplest way it looks like:

void ListenerThreadFunction()
{
TcpListener l = new TcpListener(IpAddress.Parse("127.0.0.1"), 8080);
l.Start();
Socket client = l.AcceptSocket();
client.close;
l.Stop();
}

This function is invoked from Form1_Load event of the main form:

Thread MyThread = null;

void Form1_Load(...)
{
...
MyThread = new Thread(new ThreadStarter(ListenerThreadFunction));
MyThread.Start();
}

Now, i'm trying to stop the thread if the app is closing:

void Form1_Closing(...)
{
...
if ((MyThread!=null) && MyThread.isAlive)
MyThread.Abort();
}

But it doesn't work - though main form is closed, i still see that the app proccess is alive in IDE.
MSDN says that Abort throws an exception to the thread, but it never gets there...

All of described happens of course if server didn't get a connection and the thread is alive.

I'm not that good with threads and think that i misuse the concept somehow...
Any suggestions would be highly appreciated!!!

Thank you in advance!
Andrey
 
MuZZy said:
HI,

As i posted below i have an app with a separate thread listening for a
tcp client connection.
In the simplest way it looks like:

void ListenerThreadFunction()
{
TcpListener l = new TcpListener(IpAddress.Parse("127.0.0.1"), 8080);
l.Start();
Socket client = l.AcceptSocket();
client.close;
l.Stop();
}

This function is invoked from Form1_Load event of the main form:

Thread MyThread = null;

void Form1_Load(...)
{
...
MyThread = new Thread(new ThreadStarter(ListenerThreadFunction));
MyThread.Start();
}

Now, i'm trying to stop the thread if the app is closing:

void Form1_Closing(...)
{
...
if ((MyThread!=null) && MyThread.isAlive)
MyThread.Abort();
}

But it doesn't work - though main form is closed, i still see that the
app proccess is alive in IDE.
MSDN says that Abort throws an exception to the thread, but it never
gets there...

All of described happens of course if server didn't get a connection and
the thread is alive.

I'm not that good with threads and think that i misuse the concept
somehow...
Any suggestions would be highly appreciated!!!

I could use Thread.isBackground = true, this way the thread closes when the main app closes,
but i need to be able to close the thread "gracefully" - i have a log file open in that listener thread and i need to close the file before
terminating the thread.
 
Back
Top