C#串口-不是所有的数据都添加到Listview

标签 c# listview serial-port textchanged

所以我将数据从 Arduino 传输到 C# Winform,后者将数据输出到文本框并将其保存到文件中。传输数据格式如下18|25|999|100~;第一部分是以秒为单位的时间,它让我知道什么时候跳过了一行(Arduino 每秒运行一个计数器),'~' 字符表示行结束。 该数据被拆分成一个数组(由“|”拆分),然后将该数组添加到 Listview。

文本框中的数据是完美的,所有数据都被写入,没有跳过任何行,但是后来我将数据添加到 ListView 中,并且跳过了一些行。

  private void tData_TextChanged(object sender, EventArgs e)
    {
        if (logdata.Checked)
        {
            string output = tData.Text;
            string[] lines = output.Split('\n', '\r');
            string last_line = lines[lines.Length - 1];

            if (last_line.Contains("~"))
            {

                string output1 = tData.Text;
                string[] lines1 = output1.Split('\n', '\r');
                string last_line1 = lines1[lines.Length - 1];

                string[] splitdata = last_line1.Split('|');



                    //side task - not important
                    int time = Convert.ToInt32(Convert.ToString(splitdata[0]));

                    TimeSpan currenttime = TimeSpan.FromSeconds(time);


                    string str = currenttime.ToString(@"hh\:mm\:ss\:fff");
                    label2.Text = str;



                    //save to file
                    string path = "database.can";
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        sw.WriteLine(last_line1);

                    }
                    //check if line exists to prevent doubles 
                    ListViewItem item = listView1.FindItemWithText(splitdata[0]);

                    if (item != null)
                    {
                    // it exists

                    }
                    else
                    {
                    //doesn't exist so add it
                    var listViewItem = new ListViewItem(splitdata);
                    listView1.Items.Add(listViewItem);

                    }



                }





            }
        }

tData是写入所有数据的文本框。如果有人可以帮助我防止跳过行,我将不胜感激,过去几天我一直在为此烦恼。 谢谢你, 加布

最佳答案

所以我终于弄清楚(感谢@hanspassant)使用 Readline() 解决了这个问题,在一次读取所有字节导致跳过某些行之前

关于C#串口-不是所有的数据都添加到Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244550/

相关文章:

c# - 自托管时设置 NServiceBus 端点名称/输入队列

android - 如何从 ListView 中获取所有选中的项目?

listview - jQueryMobile 中捕获过滤器清除单击事件

c# - 从串行端口读取和存储字节

c - 使用 Linux 和 C 通过串口发送文件

c# - 使用扩展方法时的意外行为

c# - WPF ListView->GridView->StackPanel

c# - 下载管理器 - 限制下载速度

android - 选择项目后,微调器下拉列表在 ListView 中绘制屏幕顶部

c# - 如何解锁COM口