C# WPF里,串口接收数据如何委托显示到UI里

之前玩c# form感觉界面不好看,而且听说WPF界面美观,且功能强大。然后就入坑又自学了C# WPF,在最关键的的时候遇见了一个关于委托的的问题让我很是烦恼,在form没遇到过这些,不过还好,几经周折总算是解决了。在此感谢我尊敬的老师!是老师您帮助我解决了这个问题!
其问题主要是串口接收到的数据如何显示在UI上,并且调试的时候抛出异常:InvalidOperationException;
以下是在微软官方找到的疑难解答:

在非 UI 线程上运行的方法会更新 UI

从 UI 线程进行 UI 更新引发 InvalidOperationException | 避免在非 UI 线程上引发 InvalidOperationException
大多数 .NET GUI(图形用户界面)应用框架(如 Windows 窗体和 Windows Presentation Foundation (WPF))只允许从创建和管理 UI 的线程(主线程或 UI 线程)访问 GUI 对象。 尝试从非 UI 线程访问 UI 元素时,将引发 InvalidOperationException。

异常消息:

WPF 应用其他信息:调用线程无法访问此对象,因为它属于其他线程所有。
官方接收传送门:[https://docs.microsoft.com/zh-cn/previous-versions/fd85b3df(v=vs.120)]

最后给出我成功显示的关键部分代码

 public delegate void Aout();//定义委托
        private void Serial_Port_DataReceived(objectsender,SerialDataReceivedEventArgs e)//串口接收事件
        {
         string msg = Serial_Port.ReadExisting();//接收存放到msg
         
         /**************************************************************/
          if (Receive_RichTextBox.Dispatcher.CheckAccess())
            {
                Receive_RichTextBox.AppendText("RX: " +msg+ "\r\n");
            }
            else
            {
                Action act = () => { Receive_RichTextBox.AppendText("RX: " + msg + "\r\n"); };
                Receive_RichTextBox.Dispatcher.Invoke(act);
            }
        }

C# WPF里,串口接收数据如何委托显示到UI里_第1张图片

你可能感兴趣的:(C#,WPF)