
[英]Is java method Thread.setDaemon(true) the equivalent in C# to Thread.IsBackground = true?
[英]Console App wont stay open, after setting isBackground = true on thread
因此,我创建了一个服务器,该服务器需要侦听客户端的连接,并且在服务器类的构造函数中,我有:
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();
}
}
}
但是当我在main中创建服务器实例时,如下所示:
class Program
{
static void Main(string[] args)
{
Server s = new Server();
}
}
服务器应保持打开状态,原因是ListenMethod运行并且while循环运行,但是程序似乎完成了构造函数并关闭了程序。
有任何想法吗?
谢谢 :)
后台线程不会像其目的那样使控制台应用程序保持活动状态。 Server类实例也超出了范围,因为它没有被任何东西使用。 在此应用程序的发布版本中,它甚至可能不会编译到应用程序中并进行优化。 您需要执行以下操作:
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.