Dobrý den, chtěl jsem si naprogramovat takový malý P2P chat, ale zaseknul jsem se na jedné věci  - když chce uživatel ukončit chat v době, kdy čeká thread na pozadí na Accept, nevím jak to ukončení korektně udělat.
Mám:
        private Thread _listenThread;
        private bool _programRunning = false;
        public Form1()
        {
            InitializeComponent();
        }
        private void ListenThread()
        {
            var receiveBuffer = new byte[1024];
            var mainReceiveSocket = new TcpListener(new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), 1234));
            mainReceiveSocket.Start();
            TcpClient tcpClient = null;
            Socket clientSocket = null;
            while (_programRunning)
            {
                do
                {
                    clientSocket = null;
                    tcpClient = mainReceiveSocket.AcceptTcpClient();
                    clientSocket = tcpClient.Client;
                } while ((clientSocket == null) || (!clientSocket.Connected && _programRunning));
                while (_programRunning)
                {
                    clientSocket.Receive(receiveBuffer);
                    var message = System.Text.Encoding.Default.GetString(receiveBuffer);
                }
            }
        }
        private void Form1_Activated(object sender, EventArgs e)
        {
            _programRunning = true;
            _listenThread = new Thread( new ThreadStart(ListenThread));
            _listenThread.Start();
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            _programRunning = false;
            _listenThread.Join();
        }
Když nastavím _programRunning na false, tak to logicky nestačí, protože AcceptTcpClient čeká, dokud se nedočká.
Jak to děláte vy, prosím?