2016-09-06 74 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