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

如何将COM端口接收的字符串拆分后分别显示在两个文本框中

实现思路

串口接收存在数据分批到达的特性,无法保证每次读取就能拿到完整的拼接字符串,所以需要先定义全局缓冲区暂存所有收到的数据,等缓冲区凑齐可拆分的完整数据后,再拆分赋值到两个文本框即可。

步骤1:在窗体类中声明必要全局成员

// 声明跨线程更新UI的委托
public delegate void SetTextCallback(string text);
// 串口接收数据的全局缓冲区
private string _receiveBuffer = string.Empty;

步骤2:修改串口接收与数据处理逻辑

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    // 读取当前批次收到的所有数据
    string data = serialPort1.ReadExisting();
    // 追加到全局缓冲区暂存
    _receiveBuffer += data;
    ProcessReceivedData();
}

private void ProcessReceivedData()
{
    // 跨线程更新UI的兼容处理
    if (this.tBoxCV1.InvokeRequired)
    {
        this.Invoke(new Action(ProcessReceivedData));
        return;
    }
    
    // 拆分规则适配示例:按"1"作为第一段起始标记、"2"作为第二段起始标记拆分
    int index1 = _receiveBuffer.IndexOf('1');
    int index2 = _receiveBuffer.IndexOf('2');
    
    // 缓冲区同时存在两个合法标记时才执行拆分
    if (index1 > -1 && index2 > -1 && index2 > index1)
    {
        // 提取第一段赋值到第一个文本框
        string part1 = _receiveBuffer.Substring(index1, index2 - index1);
        this.tBoxCV1.Text = part1;
        // 提取第二段赋值到第二个文本框,替换为你实际的第二个文本框控件名即可
        string part2 = _receiveBuffer.Substring(index2);
        this.tBoxCV2.Text = part2;
        
        // 清空已处理的缓冲区,准备接收下一组数据
        _receiveBuffer = string.Empty;
    }
}
注意事项

如果实际业务中数据有固定长度、固定分隔符或者其他校验规则,直接修改ProcessReceivedData方法中的拆分逻辑即可,也可额外添加校验位判断逻辑避免拆分错误。

内容的提问来源于stack exchange,提问作者Linux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:02