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

时间:2016-08-28 00:54:29

标签: c#

我正在创建一个新的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");
    }

1 个答案:

答案 0 :(得分:1)

我怀疑Nodes.Add(n);最终会调用Node_Added并且您有一个递归调用。

基于对你的评论问题,这确实是发生过的事情。