【问题标题】:What can I do to improve the following code so that the result is a single `TreeView.AddRange()`我可以做些什么来改进以下代码,以便结果是单个`TreeView.AddRange()`
【发布时间】:2016-08-10 08:39:05
【问题描述】:

只是对我的自定义 TreeView 控件进行了一些最终优化,看起来我可以进一步优化加载方法。这是我关注的部分,我认为可以通过首先构建所有 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() 是:

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

如何修改这段代码来完成这个?

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    想通了,答案正盯着我看:

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

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      相关资源
      最近更新 更多