c#添加ListViewItem调用不工作

时间:2015-05-21 18:42:56

标签: c# thread-safety invoke listviewitem

我有一段代码在添加到ListBox时工作得很好,当我将ListBox更改为ListView以支持多列时,应用程序开始抛出"交叉线程"错误。我尝试了各种解决方案,但似乎都没有解决我的问题。

在方法中,我从我的TCPHeader方法提供的信息创建一个字符串[]。信息将发送到我的显示器"文本框"然后用于生成新的ListViewItem

private void MakeTCP(TCPHeader tcpHeader, IPHeader ipHeader)
 {
      // Set Strings
      string ip = ipHeader.SourceAddress.ToString();
      string[] list = { ip, tcpHeader.SourcePort.ToString(), tcpHeader.DestinationPort.ToString() };

  // Does Destination Address Match
  if (ipHeader.DestinationAddress.ToString().Equals(myIP))
  {
      // Generate String Array
      string[] lines = { "TCP", 
           "Source Port: " + tcpHeader.SourcePort, 
           "Destination Port: " + tcpHeader.DestinationPort, 
           "Sequence Number: " + tcpHeader.SequenceNumber,
           "Acknowledgement Number: " + tcpHeader.AcknowledgementNumber,
           "Header Length: " + tcpHeader.HeaderLength,
           "Flags: " + tcpHeader.Flags,
           "Window Size: " + tcpHeader.WindowSize,
           "Checksum: " + tcpHeader.Checksum
                       };
      // Send to Display
      newItem(lines);

      // Does ListViewItem Exist
      if (!sourceList.Items.ContainsKey(list[0]))
      {
          // Create New ListViewItem
          ListViewItem item = new ListViewItem();
          item.Text = list[0];
          item.SubItems.Add(list[1]);
          item.SubItems.Add(list[2]);

          // Setup Action to Add **ERROR HAPPENS HERE**
          Action myAction = () => sourceList.Items.Add(item);
          if (sourceList.InvokeRequired)
              sourceList.Invoke(myAction);
          else
              myAction();

          // Change Display to View Details
          //sourceList.View = View.Details; 
      }
  }


}

我比c#更新,我正在理解如何利用Threads。如果您有任何建议,请指出我正确的方向。谢谢!

0 个答案:

没有答案