当我尝试使用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可以存储的节点数量是否有限制?
答案 0 :(得分:2)
更改通话
directoryNode.Nodes.Add(createTreeNode(directory));
为:
directoryNode.Nodes.Add(createTreeNode(dir));
它应该有效。你得到的原因" StackOverflowException"是你总是在传入的目录变量上调用createTreeNode方法,而不是在它的子目录上调用(最终,当你处于叶级时,它们将没有。)
基本上,如果你传入" C:\",你经常在" C:\"上调用createTreeNode。它永远不会结束。