如果我使用SerialPort发送获取数据,未使用SerialPort的DataReceived事件会有什么问题???

chgjz 2010-09-07 05:56:25
如题
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
应该就是某个地方没释放,你贴的这一段反复执行不会有问题。
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
一般串口操作是建立长连接的。不要频繁的打开关闭,因为关闭串口并不能省电,所以关闭没有意义,而你关闭的时机不正确,还会导致软件的死锁。我博客中有介绍。
你应当创建一个serialport对象,某个时候打开串口后就建立长连接,不关闭,直到再也不用串口了,或退出软件,才关闭串口,这之间,如果你的DataRecived事件中未使用ui资源,不需要invoke,不会死锁,你直接关闭串口,会可能导致datarecieved中的Read/readline方法异常。
chgjz 2010-09-07
  • 打赏
  • 举报
回复
我贴出的代码会不会有什么问题呢?读是可以读到正确的数据回来了,但是否要处理数据读取延时设置吖、什么二进制读取方式什么的??刚接触,望指教
chgjz 2010-09-07
  • 打赏
  • 举报
回复
因为我没有硬件测试,所以问一下。但我发给客户测试过以下代码,很不稳定,有时候会弹出端口已经打开不能设置的错误提示。奇怪明明关闭了端口呀!!
Dim por As SerialPort = New SerialPort

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If por.IsOpen = True Then
por.Close()
End If
por.BaudRate = 9600
por.ReceivedBytesThreshold = 1
por.StopBits = StopBits.One
por.Parity = Parity.None
por.DataBits = 8
por.PortName = Me.ComboBox1.SelectedItem.ToString
Try
If por.IsOpen = False Then
por.Open()
End If
por.WriteLine(Me.TextBox1.Text)
Dim strT As String
strT = por.ReadExisting()
MessageBox.Show(strT)
Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
por.Close()
End Try




End Sub
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
囧,不会有问题。你遇到什么问题了?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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