2012-07-18 25 views
-1

我正在讀串口讀取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); 
      } 
     } 

回答

1

使用下面的代碼來刪除冗餘:

  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++; 
      } 
相關問題