You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:21:02