我想问你为什么我的方法StartReading没有被触发?我期待在控制台中"测试"文本,但没有出现.
public class Connection
{
public List<byte[]> ReadBuffer = new List<byte[]>();
TcpClient ClientLogin;
NetworkStream StreamLogin;
DataEncoder NetworkBufferLogin;
Thread ReadingThread;
public Connection()
{
ClientLogin = new TcpClient("127.0.0.1", 13000);
StreamLogin = ClientLogin.GetStream();
NetworkBufferLogin = new DataEncoder(StreamLogin);
ReadingThread = new Thread(StartReading);
}
private void StartReading()
{
while (true)
{
Console.WriteLine("test");
byte[] a = NetworkBufferLogin.ReceiveData();
ReadBuffer.Add(a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
和简单的呼唤
class Program
{
static void Main(string[] args)
{
Connection test = new Connection();
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
我不是C#guru,但我认为你需要打电话Thread.Start():
public Connection()
{
ClientLogin = new TcpClient("127.0.0.1", 13000);
StreamLogin = ClientLogin.GetStream();
NetworkBufferLogin = new DataEncoder(StreamLogin);
ReadingThread = new Thread(StartReading);
ReadingThread.Start();
}
Run Code Online (Sandbox Code Playgroud)
无论如何,使用单个线程进行单个连接是一个非常糟糕的主意.你可能应该使用异步IO(非常简单,使用TPL和async/ await关键字,kudos,.Net),或者至少使用线程池.
您应该将您的计划视为一项业务,并将线程创建为雇用新员工.你会雇佣并为你的企业要求的每项任务解雇一名新员工吗?当然不是.你应雇用一些工人,使他们能够完成你的业务所需的任务.