C#之串口的一些问题

整体来说,C#编写串口调试程序入门还是挺简单的,SerialPort.GetPortNames();就可以获取串口号,这些都不多讲,参考微软官网https://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport(v=vs.110).aspx就懂了,最难解决的问题是串口线程与UI界面的消息传递问题,本人也正解决此问题。

     因为串口接收数据需要一直处于监听状态,那么就需要启用的新的线程来专门监听,SerialPort类也都已经打包好了,不用再自己写了,当然大神也可以自己写。SerialPortDataReceived += comm_DataReceived;就可以将监听函数添加到已经写好的委托(事件)中去,当接收到数据时就会触发接收事件,在接收数据的comm_DataReceived方法中使用Invoke方式来订阅事件,如这样

this.Invoke((EventHandler)(delegate
                {
                    foreach (byte b in buf)
                    { 
                        this.textBox1.AppendText(b.ToString()+'\t');
                    }

}

就可以实现接收到的数据更新到界面中了,波特率为9600的时候这种方式很好,看起来也好理解,但到波特率达到115200的时候,且下位机不断给该串口发送数据的时候就不一样了,只要一打开串口,界面就卡死了,改了SerialPortReceivedBytesThreshold = 64; 也无效,默认该值为1,即接收到64字节后才触发事件还是不行。

     有人说 通过共享内存的方式,在在主线程里用定时器去读取数据可以解决这问题,但感觉也不是太好,更多方法还在探索中。


尾注:委托和事件是C#里类似于指针一样高大上的东西,要会应用需要漫长的积累


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值