将Object添加到集合需要很长时间

本文关键字:长时间 集合 Object 添加 | 更新日期: 2023-09-27 18:04:26

我正在创建一个新的Node对象,然后将其添加到集合中。

问题是当它碰到代码行:

Nodes.Add(n);

调试器只是坐在那里,就像添加需要永远。如果我离开并在30分钟后回来并点击Break All,它仍然会添加节点。

你知道为什么会这样吗?

public BindingList<vmNode> Nodes;

        private void Node_Added(BindingList<vmNode> nodes)
    {
        tvwNodes.SelectedNode.Expand();
        using (ENIEntities context = ENIEntities.ConnectToSqlServer(ENI.Data.Configuration.ConnectionString))
        {
            foreach (vmNode n in nodes)
            {
                //Do Prefix and Suffix
                //ENI.Node Node = new ENI.Node(Convert.ToInt32(tvwNodes.SelectedNode.Value));
                NodeType nt = null;
                nt = context.NodeTypes.SingleOrDefault(no => no.NodeTypeID == n.NodeTypeID);

                n.Name = (nt.Prefix ?? "") + " " + n.Name + " " + (nt.Suffix ?? "");
                Nodes.Add(n);
                //StyleNode
                StyleNode(GetAddedNode(tvwNodes.SelectedNode.Nodes, n.NodeID));
            }
        }
    }

调用代码

        private void showAddNodeDialog(string strNodeType)
    {
        if (tvwNodes.SelectedNode != null)
        {
            Node Node = null;
            using (ENIEntities context = ENIEntities.ConnectToSqlServer(ENI.Data.Configuration.ConnectionString))
            {
                Node = context.Nodes.Find((Int32)tvwNodes.SelectedNode.Value);
            }
            frmNewNode frm = new frmNewNode(Node.NodeID, strNodeType);
            frm.NodeAdded += Node_Added;
            frm.ShowDialog();
            if (frm.copiedChildren)
            {
                LoadTree();
            }
            loadControls();
            tvwNodes.SelectedNode = GetAddedNode(tvwNodes.Nodes, Node.NodeID);
            tvwNodes.SelectedNode.Expand();
            tvwNodes.SelectedNode.EnsureVisible();
            frm.NodeAdded -= Node_Added;
            frm.Dispose();
            //frmNewDocument frm = new frmNewDocument(Convert.ToInt32(tvwNodes.SelectedNode.Value), strDocumentType);
            //frm.ShowDialog();
            //loadControls();
        }
        else
            MessageBox.Show("You Must Select a Node to Add to");
    }

将Object添加到集合需要很长时间

我怀疑Nodes.Add(n);最终调用Node_Added,你有一个递归调用。

根据对你问题的评论,这似乎确实发生了。