Listview 从串行端口向列表视图添加项目时出错。。

Listview 从串行端口向列表视图添加项目时出错。。,listview,serial-port,modem,Listview,Serial Port,Modem,我正在读取串行端口以读取gsm调制解调器中的消息,然后在列表视图中显示它们。但我最终得到了一个包含冗余项的列表视图。我无法理解为什么会发生这种事 { port.DiscardOutBuffer(); port.DiscardInBuffer(); string res; Thread.Sleep(5000); res = port.ReadExisting(); ShortMessageCollect

我正在读取串行端口以读取gsm调制解调器中的消息,然后在列表视图中显示它们。但我最终得到了一个包含冗余项的列表视图。我无法理解为什么会发生这种事

{
        port.DiscardOutBuffer();
        port.DiscardInBuffer();
        string res;
        Thread.Sleep(5000);
        res = port.ReadExisting();
        ShortMessageCollection messages = new ShortMessageCollection();
        Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
        Match m = r.Match(res);
        while (m.Success)
        {
            ShortMessage msg = new ShortMessage();

            msg.Index = m.Groups[1].Value;
            msg.Status = m.Groups[2].Value;
            msg.Sender = m.Groups[3].Value;
            msg.Alphabet = m.Groups[4].Value;
            msg.Sent = m.Groups[5].Value;
            msg.Message = m.Groups[6].Value;
            messages.Add(msg);
            m = m.NextMatch();
            objShortMessageCollection = (ShortMessageCollection)messages;
            foreach (ShortMessage mesg in objShortMessageCollection)
            {
                ListViewItem item = new ListViewItem(new string[] {mesg.Index, mesg.Sender, mesg.Message, mesg.Sent});
                item.Tag = mesg;
                lvwMessages.Items.Insert(0, item);
            }
         }

使用以下代码删除冗余:

            lvwMessages.Sorting = SortOrder.Descending;
            int i = 0;
            while (i < lvwMessages.Items.Count - 1)
            {
                if (lvwMessages.Items[i].Tag == lvwMessages.Items[i + 1].Tag)
                    lvwMessages.Items[i + 1].Remove();
                else
                    i++;
            }
lvwMessages.Sorting=SortOrder.Descending;
int i=0;
而(i