Unable to Abort a listening thread

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
 
M

MuZZy

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top