C# 当2个客户端正在发送数据时,StreamReader.ReadLine挂起
我在做一个实验,我得到了一个streamreader和两个TcpClient streamreader,streamreader继续从客户端1读取数据,直到客户端1发送了一些数据,才从客户端2读取数据 因此,如果客户端1从未发送任何内容,streamreader将永远不会从客户端2读取 我已经试了很长时间来修复它C# 当2个客户端正在发送数据时,StreamReader.ReadLine挂起,c#,streamreader,readline,C#,Streamreader,Readline,我在做一个实验,我得到了一个streamreader和两个TcpClient streamreader,streamreader继续从客户端1读取数据,直到客户端1发送了一些数据,才从客户端2读取数据 因此,如果客户端1从未发送任何内容,streamreader将永远不会从客户端2读取 我已经试了很长时间来修复它 while(true) { foreach (Client client in Clients)
while(true)
{
foreach (Client client in Clients)
{
var sr = client.clientStreamReader;
string data;
try
{
if ((data = sr.ReadLine()) != null)
{
Console.WriteLine(data);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
(客户端是一个类,用于保存streamreader并写入)为每个客户端提供一个单独的线程,请尝试以下操作:
void ReadFromClient(Client client)
{
var sr = client.clientStreamReader;
string data;
try
{
if ((data = sr.ReadLine()) != null)
{
Console.WriteLine(data);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
然后在每次启动新线程时循环客户端:
foreach (Client client in Clients)
{
Task.Factory.StartNew(new Action(() => ReadFromClient(client)) );
}
一个问题是我如何获得客户机,因为它是在foreach循环中定义的,而不是在线程中定义的