Читать поток в одном потоке и записывать поток в другом потоке в C # - PullRequest
0 голосов
/ 23 сентября 2019

В следующем коде сообщения от сервера принимаются в одном потоке (внутри while loop).И сообщения на сервер отправляются в главном потоке графического интерфейса (на sendButton_Click)

using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;

namespace SimulatedClient
{
    public partial class ClientForm : Form
    {
        TcpClient clientSocket = new TcpClient();
        NetworkStream serverStream = default(NetworkStream);
        string readdata = null;

        public ClientForm()
        {
            InitializeComponent();
        }

        private void connectButton_Click(object sender, EventArgs e)
        {
            clientSocket.Connect(hostTextbox.Text, Int32.Parse(portTextBox.Text));

            Thread ctThread = new Thread(getMessages);
            ctThread.Start();
        }

        public void getMessages()
        {
            string returnData;

            while (true)
            {
                serverStream = clientSocket.GetStream();
                var buffersize = clientSocket.ReceiveBufferSize;
                byte[] instream = new byte[buffersize];

                serverStream.Read(instream, 0, buffersize);
                returnData = System.Text.Encoding.ASCII.GetString(instream);
                readdata = returnData;

                UpdateReceivedPressureLabelText(readdata);
                //msg();
            }
        }

        void UpdateReceivedPressureLabelText(string value)
        {
            Action action = () => incomingTextBox.Text = value;
            this.Invoke(action);
        }

        //private void msg()
        //{

        //    if (this.InvokeRequired)
        //    {
        //        this.Invoke(new MethodInvoker(msg));

        //    }
        //    else
        //    {
        //        incomingTextBox.Text = readdata;
        //    }
        //}

        private void sendButton_Click(object sender, EventArgs e)
        {
            byte[] outstream = Encoding.ASCII.GetBytes(outgoingTextBox.Text);

            serverStream.Write(outstream, 0 , outstream.Length);
            serverStream.Flush();
        }
    }
}

enter image description here

ВОПРОС: Можно ли это сделать, то есть можно ли получать сообщения, используя один поток, и отправлять сообщения в другом потоке для одного и того же clientSocket?Программа работает, но я не уверен, что это может привести к какой-то проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...