在线程上设置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循环,服务器应该保持打开状态,但程序似乎完成了构造函数并关闭了程序。

有什么想法吗?

感谢:)

在线程上设置isBackground=true后,控制台应用程序将不会保持打开状态

后台线程不会像它们的目的那样使控制台应用程序保持活动状态。服务器类实例也超出了作用域,因为它没有被任何东西使用;在该应用程序的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();
        }
    }