VB.NET串口读取电子秤重量时UI不断追加数据不更新如何解决
问题原因
你当前代码使用&=运算符给文本框赋值,该运算符会将新读取的串口数据追加到原有文本末尾,因此会不断出现多行内容。同时原逻辑没有对收到的串口数据做报文整理,直接全部拼接输出,也不符合仅展示最新重量的需求。
代码修改方案
仅需要修改Timer1_Tick事件的逻辑即可,修改后的代码如下:
Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick SyncLock Q If Q.Count = 0 Then Return ' 合并队列中所有新收到的数据 Dim totalReceived As New System.Text.StringBuilder() While Q.Count > 0 totalReceived.Append(Q.Dequeue) End While ' 按换行拆分所有收到的内容,过滤空行后取最后一条就是最新重量 Dim weightLines = totalReceived.ToString().Split({vbCrLf, vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries) If weightLines.Length > 0 Then ' 直接替换文本框内容,而非追加 TextBox1.Text = weightLines.Last().Trim() End If End SyncLock End Sub
可选优化
如果你的电子秤输出的重量为固定长度、无换行的报文,可以直接简化逻辑为:
Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick SyncLock Q If Q.Count = 0 Then Return Dim latestWeight As String = "" While Q.Count > 0 latestWeight = Q.Dequeue End While TextBox1.Text = latestWeight.Trim() End SyncLock End Sub
你也可以将文本框的Multiline属性设置为False,避免误显示多行内容。
内容的提问来源于stack exchange,提问作者Abd Domingos
相关产品推荐
相关产品推荐

