如何终止一个正在运行的线程

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:06:43
/// <summary>
/// 新开一个线程,用于接收客户端的连接
/// </summary>
public void StartServerListen()
{
ThreadListener = new Thread(new ThreadStart(StartListen));
ThreadListener.Start();//新开一个线程,用于接收客户端的连接
}

private void StartListen()//开始侦听,允许客户端连接
{
try
{
SocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//定义网络连接侦听
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, ServerPort);//在指定端口上建立接收网络端点,允许任何IP连接
SocketListener.Bind(remoteEP);
SocketListener.Listen(1);
do
{

Socket S = SocketListener.Accept();//开始侦听网络连接
if (ServerSocket != null) ServerSocket.Close();//只允许一个IP连接

遇到这种情形时,直接终止线程一般都是不成功的,总是处于等待线程终止的状态。

解决方法:在调用 Abort 方法终止线程前,先构造一个新 Socket 套接字,并连接那个监听 ServerReceive 这样 Accept 方法就会从阻塞状态恢复,然后在关闭新创建的套接字并终止线程。

ChinaLad 的方法是可以的。还有一个方法,在MSDN上,微软处理挂起线程退出的问题时,用的是直接调用TerminateThread这个API函数,因为它是唯一能强制挂起线程返回的函数。