我有一个方法用作线程安全回调来更新树视图。它需要两个字符串参数。第一个是传递的数据,第二个是它检查的主机的IP。
我正在尝试检查树视图当前是否包含包含输入字符串的字符串,如果它不应该将它作为父节点添加到树视图中,那么在下面添加ip字符串作为一个孩子。虽然它确实已经包含该输入字符串作为父节点,但它应该只添加数据字符串匹配的父节点下面的IP地址。所以它基本上对ips进行了排序。每个父节点下面都有多个ips。
我的问题是我的方法是将每个字符串添加为它自己的父字符串,无论它是否重复,这也意味着它不会在父字母下面添加重复输入的IP。谁能看一看,看看我哪里出错?
public void UpdateScan(string input, string ip)
{
lock (outputTree)
{
outputTree.BeginUpdate();
if (!(outputTree.Nodes.ContainsKey(input)))
{
TreeNode treeNode = new TreeNode(input);
//Add our parent node
outputTree.Nodes.Add(treeNode);
//Add our child node
treeNode.Nodes.Add(ip);
}
else
{
TreeNode[] treeNode = outputTree.Nodes.Find(input, true);
//Add only child node
foreach (var node in treeNode)
{
node.Nodes.Add(ip);
}
}
outputTree.EndUpdate();
}
}
答案 0 :(得分:1)
我能够让它运转起来。通过动态地将包含数据的密钥添加到父节点,然后我可以使用该密钥查找父级以向其添加正确的子级。
public void UpdateScan(string input, string ip)
{
lock (outputTree)
{
outputTree.BeginUpdate();
if (! outputTree.Nodes.ContainsKey(input))
{
TreeNode treeNode = new TreeNode(input);
treeNode.Name = input;
//Add our parent node
outputTree.Nodes.Add(treeNode);
//Add our child node
treeNode.Nodes.Add(ip);
}
else
{
TreeNode[] found = outputTree.Nodes.Find(input, true);
TreeNode newChild = new TreeNode(ip);
//Add only child node
found[0].Nodes.Add(newChild);
}
outputTree.EndUpdate();
}
}