networkStream.Read blokuje

Piszę prostą aplikację, która połączy się z serwerem. Chcę jednak również wysłać proste polecenia czatu (patrzConsole.ReadLine poniżej). Jednak ten skrypt nie dotrzestring Message = Console.ReadLine(); odkąd jest zablokowanybytesRead = clientStream.Read(message, 0, 4096);.

Chcę kontynuować ten skrypt, ale jeśli przychodzą bajty, powinien je przetworzyć (tak jak teraz) i jeśli nie przychodzą żadne bajty, powinien przejść przez skrypt i poczekać na wprowadzenie danych przez użytkownika. Jak można to osiągnąć?

        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();

        byte[] message = new byte[4096];
        int bytesRead;

        while (true)
        {
            bytesRead = 0;

            try
            {
                // Blocks until a client sends a message                    
                bytesRead = clientStream.Read(message, 0, 4096);
            }
            catch (Exception)
            {
                // A socket error has occured
                break;
            }

            if (bytesRead == 0)
            {
                // The client has disconnected from the server
                break;
            }

            // Message has successfully been received
            ASCIIEncoding encoder = new ASCIIEncoding();

            // Output message
            Console.WriteLine("To: " + tcpClient.Client.LocalEndPoint);
            Console.WriteLine("From: " + tcpClient.Client.RemoteEndPoint);
            Console.WriteLine(encoder.GetString(message, 0, bytesRead));

            // Return message
            string Message = Console.ReadLine();
            if (Message != null)
            {
                byte[] buffer = encoder.GetBytes(Message);
                clientStream.Write(buffer, 0, buffer.Length);
                clientStream.Flush();
            }

questionAnswers(1)

yourAnswerToTheQuestion