我能做些什么来改进下面的代码,使结果是一个单一的' 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)));
    }
}

_treeNodesDictionary<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[] )方法。

如何修改此代码以实现此目的?

我能做些什么来改进下面的代码,使结果是一个单一的' TreeView.AddRange() '

想明白了,答案就在眼前:

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())));