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

2 篇文章 0 订阅

之前玩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);
            }
        }

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值