1)在线程函数Process中增加一个计时,如下面代码
void Process( )
{
//线程启动时,记录进入线程的时间
DateTime t0 = DateTime.Now;
//线程循环
while(true)
{
//……
if( 接收到客户端的数据)
{
t0 = DateTime.Now;
//接收数据处理(代码略)
}
//判断是否超过50秒
if((DateTime.Now - t0).TotalSeconds>50)
{
// 在此关闭连接(代码略)
//退出线程
return;
}
}
}
2)最好将接收线程设置为后台线程
Thread thread = new Thread(new ThreadStart(this.Process));
//将接收处理线程设置为后台运行
thread.IsBackground = true;
thread.Start();
这里我给你提供多种超时结束线程的代码,你设置一个计时器,到时执行如下代码即可kill线程:
Environment.Exit(Environment.ExitCode);
Stsyem.Treading.Tread.CurrentTread.Abort();
Process.GetCurrentProcess().Kill();
Application.ExitTread();
希望对你有用,goodlucky
使用BeginAccept避免阻塞,然后开个线程判断超时。
或者使用Select模式避免阻塞,然后开个线程判断超时。