WPF 文本块更新

本文关键字:更新 文本 WPF | 更新日期: 2023-09-27 18:36:25

只是出于学术目的,我将以前的代码从 Windows 窗体改编为 WPF,问题是我不明白调用是如何工作的,希望有人可以在我阅读一些教程时告诉我一些解释我可以做什么来适应这段代码。

每次有人在send_click上发送消息时,它都会发送到服务器,该服务器调度到所有连接的套接字。我的问题是,如何调整此代码以使文本块"可更新"?它说它已经被另一个线程(主线程)使用。这是我的应用程序包含的代码。提前感谢!

更新#1:这是我第一次尝试使用调度程序调用 http://gyazo.com/42008aacbec2f8494bb7c6c33889d9ad 但是我不明白这堵文本墙背后的原因。

 public Lobby()
    {
        InitializeComponent();
        ctThread = new Thread(getMessage);
        ctThread.Start();
        clientSocket.Connect("127.0.0.1", 8888);
        serverStream = clientSocket.GetStream();
    }
    TcpClient clientSocket = new System.Net.Sockets.TcpClient();
    NetworkStream serverStream = default(NetworkStream);
    string readData = null;
    Thread ctThread;

    private void btnSend_Click(object sender, RoutedEventArgs e)
    {
        byte[] outStream = System.Text.Encoding.ASCII.GetBytes(txtInput.Text);
        serverStream.Write(outStream, 0, outStream.Length);
        serverStream.Flush();
    }
    private void getMessage()
    {
        while (true)
        {
            serverStream = clientSocket.GetStream();
            int buffSize = 0;
            byte[] inStream = new byte[10025];
            buffSize = clientSocket.ReceiveBufferSize;
            serverStream.Read(inStream, 0, buffSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            readData = "" + returndata;
            Dispatcher.BeginInvoke(new Action(() =>
                {
                        txtContent.Text = txtContent.Text + Environment.NewLine + " >> " + readData;
                }));
        }
    }          

WPF 文本块更新

msg位于

自己的线程上,因此必须将该函数的 UI 更新编接到 UI 线程上。您可以使用Dispatcher.BeginInvoke执行此操作:

Dispatcher.BeginInvoke(new Action(() =>
{
    if (txtContent.Text != null)
    {
        txtContent.Text = txtContent.Text + Environment.NewLine + " >> " + readData;
    }
});

请注意,应考虑使用绑定,而不是直接操作 UI。