在线程上设置isBackground=true后,控制台应用程序将不会保持打开状态
本文关键字:状态 应用程序 控制台 设置 线程 isBackground true | 更新日期: 2023-09-27 17:58:45
所以我创建了一个需要监听客户端连接的服务器,在我的服务器类的构造函数中,我有:
class Server
{
private Thread listenerThread;
private TcpListener listener;
public Server()
{
this.listener = new TcpListener(IPAddress.Any, 5000);
listenerThread = new Thread(ListenMethod) { IsBackground = true };
listenerThread.Start();
}
private void ListenMethod()
{
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
}
}
}
但是当我在我的主目录中创建服务器实例时,比如:
class Program
{
static void Main(string[] args)
{
Server s = new Server();
}
}
由于ListenMethod正在运行和while循环,服务器应该保持打开状态,但程序似乎完成了构造函数并关闭了程序。
有什么想法吗?
感谢:)
后台线程不会像它们的目的那样使控制台应用程序保持活动状态。服务器类实例也超出了作用域,因为它没有被任何东西使用;在该应用程序的Release版本中,它甚至可能不会编译到应用程序中并进行优化。你需要做这样的事情:
static void Main(string[] args)
{
Server server = new Server();
Console.Write("The server is running. Press any key to stop the server.");
Console.ReadKey();
server.Stop();
}
在调用Start()
之前,您似乎没有实例化listner
实例,因此代码可能由于NullReferenceException
而在listener.Start()
上崩溃
我期待这样的东西:
private void ListenMethod()
{
listener = new TcpListener();
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
}
}