【发布时间】:2010-12-29 17:22:44
【问题描述】:
我正在用 C# 编写一个 tcp 服务器应用程序。我设计了一个名为 TcpCommunication 的类来实现服务器。 TcpCommunication 拥有下一个成员:
private TcpListener tcpListener;
private TcpClient clientObj;
private Thread listenThread;
还有一个 connect() 方法:
public bool Connect()
{
...
listenThread = new Thread(new ThreadStart(ListenForClients));
listenThread.IsBackground = true;
listenThread.Start();
...
}
ListenForClients 方法实现如下:
private void ListenForClients()
{
while (true)
{
try
{
//blocks until a client connects to the server
clientObj = tcpListener.AcceptTcpClient();
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ThreadStart(Receive));
clientThread.IsBackground = true;
clientThread.Start();
}
...
}
}
在某些情况下(当用户决定时)我想停止监听新客户端并停止为现有客户端提供服务。 我的问题是:当它们的创建者线程(不是主线程)中止时,所有子线程都会中止吗? 我是否需要保存所有线程的集合并一个一个中止它们,或者下一个实现是否足够?
public bool Disconnect()
{
if (listenThread != null)
{
listenThread.Abort();
listenThread.Join();
}
tcpListener.Stop();
return true;
}
【问题讨论】:
标签: c# multithreading tcplistener