【问题标题】:Stack overflow when creating TreeView创建 TreeView 时堆栈溢出
【发布时间】:2016-09-06 21:52:55
【问题描述】:

当我尝试使用 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 可以存储的节点数量是否有限制?

【问题讨论】:

  • 我猜你的意思是directoryNode.Nodes.Add(createTreeNode(**dir**));

标签: c# winforms tree directory treeview


【解决方案1】:

换个电话

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

到:

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

它应该可以工作。您收到“StackOverflowException”的原因是您总是在传入的目录变量上调用 createTreeNode 方法,而不是在其子目录上(最终,当您处于叶级时,不会有任何子目录)。

基本上,如果你传入“C:\”,你会不断地在“C:\”上调用createTreeNode,它永远不会结束。

【讨论】:

  • 啊,有道理。没有意识到我在那里有原始目录而不是包含的目录。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
相关资源
最近更新 更多