我正在创建一个新的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");
}
答案 0 :(得分:1)
我怀疑Nodes.Add(n);
最终会调用Node_Added
并且您有一个递归调用。
基于对你的评论问题,这确实是发生过的事情。