创建TreeView时堆栈溢出

时间:2016-09-06 21:52:56

标签: c# winforms tree directory treeview

当我尝试使用WinForms创建树视图时,我收到了堆栈溢出。

private void createFeatureTree()
{
    FeatureTree.Nodes.Clear();
    FeatureTree.Nodes.Add(createTreeNode(new DirectoryInfo(starting directory path)));
}

private TreeNode createTreeNode(DirectoryInfo directory)
{
   var directoryNode = new TreeNode(directory.Name);
   foreach (var dir in directory.GetDirectories())
   {
       directoryNode.Nodes.Add(createTreeNode(directory));
   }

   foreach (var file in directory.GetFiles())
   {
       directoryNode.Nodes.Add(new TreeNode(file.Name));
   }

   return directoryNode;
}

createFeatureTree()在启动时在自己的线程上调用。为什么我得到堆栈溢出错误? TreeView可以存储的节点数量是否有限制?

1 个答案:

答案 0 :(得分:2)

更改通话

directoryNode.Nodes.Add(createTreeNode(directory));

为:

directoryNode.Nodes.Add(createTreeNode(dir));

它应该有效。你得到的原因" StackOverflowException"是你总是在传入的目录变量上调用createTreeNode方法,而不是在它的子目录上调用(最终,当你处于叶级时,它们将没有。)

基本上,如果你传入" C:\",你经常在" C:\"上调用createTreeNode。它永远不会结束。