我有一段代码在添加到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。如果您有任何种建议,请指出我正确的方向。谢谢!