2016-09-06 75 views
0

当我尝试使用WinForms创建树视图时,出现堆栈溢出。创建TreeView时堆栈溢出

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可以存储的节点数量是否有限制?

+4

我想你的意思是'directoryNode.Nodes.Add(createTreeNode(** dir **));' –

回答

2

更改呼叫

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

到:

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

,它应该工作。你得到“StackOverflowException”的原因是你总是调用createTreeNode方法来传递目录变量,而不是在它的子目录上(当你在叶级时,最终没有这个方法)。基本上,如果你传入“C:\”,你会不断地在“C:\”上调用createTreeNode,它永远不会结束。

+0

啊,有道理。没有意识到我有原来的目录在那里,而不是包含的。感谢您的帮助! – FyreeW