有关vb.net中SerialPort串口控件的用法

ppooww12121 2014-07-30 08:59:32
第一次接触SerialPort串口控件,其接受数据是怎么操作的 ,看见网上说 “DataReceived事件在辅线程被引发” 是什么意思,需要进行多线程吗,有简单的实例给个参考下更好!
...全文
1052 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try UART_PORT.ReceivedBytesThreshold = 1 '设置 DataReceived 事件发生前内部输入缓冲区中的字节数。 Catch ex As Exception Application.Exit() End Try End Sub Private Sub DataReceived(ByVal sender As Object, ByVal e As System.EventArgs) Try If UART_PORT.IsOpen Then If UART_PORT.BytesToRead > 0 Then Dim mbyte(UART_PORT.BytesToRead - 1) As Byte Dim RtmpCount As Integer = UART_PORT.Read(mbyte, 0, UART_PORT.BytesToRead) 'add your code here Dim ReadString As String = System.Text.Encoding.Default.GetString(ReadByte) Me.TextBox1.AppendText(ReadString) End If End If Catch ex As Exception ErrorEvent(ex) End Try End Sub Private Sub UART_PORT_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles UART_PORT.DataReceived Threading.Thread.Sleep(50) '延时等待缓冲。 Me.BeginInvoke(New EventHandler(AddressOf DataReceived)) End Sub
ppooww12121 2014-07-31
  • 打赏
  • 举报
回复
我用串口助手发送,VB这边接收,只有第一次发送可以接收到 Delegate Sub SetTextCallback(ByVal InputString As String) Private Sub ShowString(ByVal comData As String) TextBox1.Text += comData '将收到的数据入接收文字框中 TextBox1.SelectionStart = TextBox1.Text.Length TextBox1.ScrollToCaret() End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim inData As String = SerialPort1.ReadExisting Dim d As New SetTextCallback(AddressOf ShowString) BeginInvoke(d, inData) End Sub
沐NeMo 2014-07-31
  • 打赏
  • 举报
回复
你要看看SerialPort1发送过来的是什么数据。 读取方式是:SerialPort1.ReadExisting 或者 SerialPort1.ReadLine。 串口助手发送如果只发送一次,还是不断的在发送数据。
ppooww12121 2014-07-30
  • 打赏
  • 举报
回复
我用另外pc发送字符,串口收到了,但是文本框没有显示出来,当我单击文本框或窗体获得焦点后才有显示,这是不是因为线程引起的,没有实时显示
dylike 2014-07-30
  • 打赏
  • 举报
回复
在Form1_Load()事件里加一句: CheckForIllegalCrossThreadCalls = False 这可以以不完全的情况下跨线程.
ppooww12121 2014-07-30
  • 打赏
  • 举报
回复
没有高手在吗?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧