无法从 winform 中的线程更改 UI



我正在做一些关于多线程的任务。首先,我创建表单 1,它将连接到带有套接字的服务器:clientSocket.Connect("127.0.0.1", 8888);
然后我创建一个线程调用 getMessage,它将侦听来自服务器的消息:ctThread = new Thread(getMessage); ctThread.Start();
和这里的 getMessage 函数:

while (true)
            {
                serverStream = clientSocket.GetStream();
                byte[] inStream = new byte[10025];
                int buffSize = clientSocket.ReceiveBufferSize;
                serverStream.Read(inStream, 0, buffSize);
                string returndata = System.Text.Encoding.ASCII.GetString(inStream);
                readData = "" + returndata;
                if (readData.IndexOf("$") != -1)
                {
                    readData = readData.Substring(0, readData.IndexOf("$"));
                    newFrm = new Form1();
                    newFrm.doNetworkMethod(readData);
                }
            }
然后我在 Form2 中

为 Form1 创建 doNetworkMethod 以将数据发送到 Form2,并在 form2 中加载事件函数中我有
doNetworkDelegate w = doNetworkMethod; w.BeginInvoke(readData, null, null);

在此之前,我创建了 2 个委托
public delegate void doNetworkDelegate(string readData); public delegate void displayChatDelegate(string readData);
最后,我创建了 2 个函数调用:

public void doNetworkMethod(string readData)
    {
        if (readData != null)
        {
            if (!this.IsHandleCreated) this.CreateHandle();
            this.Invoke(new displayChatDelegate(displayChatMethod), new object[] { readData.ToString() });
            Thread.Sleep(1);
        }
    }
    public void displayChatMethod(string readData)
    {
        lock (this)
        {
            textBox1.Text = textBox1.Text + readData;
            textBox2.Text = textBox2.Text + readData; 
        }
    }

但是textBox1textBox2不显示 readData 内容,但当我创建MessageBox.show(readData)时,它会显示。

感谢您的帮助

不能在非 UI 线程中创建 UI 元素。

getMessage函数中调用的代码newFrm = new Form1();需要在调用之前封送回 UI 线程。

相关内容

  • 没有找到相关文章

最新更新