vb.net - VBA SerialPort_DataReceived 延迟或未收到所有数据
问题描述
天。
通过 VBA,基本程序的串行有一些问题。向 Arduino 发送字符,Arduino 接收字符,访问 SD 卡并打印到串行。WinForm 将此数据作为变量收集并写入 .csv 文件。
发送字符(是的,我知道 tis 字符串 atm 计划更改 :))
Private Sub Button_Download_Click(sender As Object, e As EventArgs) Handles Button_Download.Click
Dim downloadChar As String = "a" & vbCrLf
SerialPort1.Write(downloadChar)
SaveFileDialog1.FileName = devName
SaveFileDialog1.ShowDialog()
End Sub
接收字节
Private Sub Serialport1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
MsgBox("Fired")
Dim strBuilder As System.Text.StringBuilder = New System.Text.StringBuilder()
For index = 1 To SerialPort1.BytesToRead
strBuilder.Append(Convert.ChangeType(SerialPort1.ReadByte(), GetType(Char)))
Next
Dim myString = strBuilder.ToString()
TextBox2.CheckForIllegalCrossThreadCalls = False
TextBox2.Text = TextBox2.Text + myString
Dim Path As String
Path = SaveFileDialog1.FileName
System.IO.File.WriteAllText(Path, myString)
End Sub
问题是 _datareceived 子被触发不止一次(当前是 2kb 文件大小的两倍),它写入了 myString。
如果我添加一个消息框,例如“已触发”并在单击“确定”之前稍等片刻,它可以完美地工作,如下所示。这对我来说很好,但是对于更大的文件大小,等待时间是未知的。
我尝试过执行循环,将变量添加到 bytestoread,例如 startBytes 和 moreBytes,如果 moreBytes > 0 退出,则检查该循环。尝试了除 MsgBox/timers 之外的变量/对话框。
问题:任何其他方式来延迟 _datarecieved 以便在读取 bytestoreceive 之前能够接收所有字节?
为菜鸟问题道歉。:(
解决方案
推荐阅读
- r - 设置具有权重约束的 R 优化问题
- java - CXF 故障拦截器 - 记录soap 故障消息,如soap 客户端中所示
- sparql - 如何 SPARQL 从 Wikidata 上的欧盟政党中选择所有在世的政治家?
- xslt - 添加新元素 XSLT
- python - BeautifulSoup 无法从部分初始化的模块“bs4”导入名称“BeautifulSoup”
- c++ - 犰狳矩阵中的多种数据类型
- c - C Primer Plus 6th 中的 C 中的数据类型
- reactjs - 反应 .map 一个对象
- android - gmail 中忽略电子邮件意图主题,但可与其他邮件客户端一起使用
- javascript - 如何在验证弹出模式上放置要使用输入元素(v-select)固定的下拉项?