我能做些什么来改进下面的代码,使结果是一个单一的' TreeView.AddRange() '
本文关键字:AddRange TreeView 单一 一个 做些什么 代码 结果是 | 更新日期: 2023-09-27 18:01:44
只是在我的自定义TreeView控件上做一些最后的优化,看起来我可以进一步优化load方法。这是我关注的部分,我觉得可以通过首先构建所有treenode来优化,然后使用单个TreeView.AddRange( nodes[] )
方法。
// Create hierarchy and load into view
foreach (var id in _treeNodes.Keys)
{
var node = GetNode(id);
var obj = (T)node.Tag;
var parentId = getParentId(obj);
if (parentId.HasValue)
{
var parentNode = GetNode(parentId.Value);
if(parentNode == null)
{
Invoke((MethodInvoker)(() => Nodes.Add(node)));
} else
{
Invoke((MethodInvoker)(() => parentNode.Nodes.Add(node)));
}
}
else
{
Invoke((MethodInvoker)(() => Nodes.Add(node)));
}
}
_treeNodes
即Dictionary<ulong, TreeNode>
GetNode()
is:
if(_treeNodes.ContainsKey(id))
{
return _treeNodes[id];
} else
{
return null;
}
getParentId()
是一个委托Func<NtfsUsnJournal.UsnEntry, ulong?> getParentId = (x => x.ParentFileReferenceNumber)
代码当前从字典列表中获取所有值,该列表是NTFS日志中的所有目录,这发生得非常快。延迟是在每个Node
和子节点上,它被直接添加到TreeView中。
我想做的是建立一个根节点列表(当然包含所有子节点),然后将其作为TreeNode[]
数组传递给单个Invoke()
中的.AddRange( TreeNode[] )
方法。
如何修改此代码以实现此目的?
想明白了,答案就在眼前:
List<TreeNode> _t = new List<TreeNode>();
foreach (var id in _treeNodes.Keys)
{
var node = GetNode(id);
var obj = (T)node.Tag;
var parentId = getParentId(obj);
if (parentId.HasValue)
{
var parentNode = GetNode(parentId.Value);
if(parentNode == null)
{
_t.Add(node);
} else
{
parentNode.Nodes.Add(node);
}
}
else
{
_t.Add(node);
}
}
Invoke((MethodInvoker)(() => Nodes.AddRange(_t.ToArray())));