繁体   English   中英

在线程上设置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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM