您的位置:首页 > 编程语言 > C#

C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中

2012-03-10 13:07 766 查看
界面设计步骤:

从工具箱中拖放一个TreeView(teeView1)和一个Button(button1)到WinForm窗体中

添加引用:

using System.Threading;

using System.IO;

详细代码:

#region 目录树委托定义

private delegate void UpdateTreeViewDelegate(TreeNode node);//声明委托类型

private static string CurrentFolderPath;

#endregion

#region 目录树节点操作函数

/// <summary>

/// 加载节点到TreeView中

/// </summary>

/// <param name="node">TreeNode</param>

private void AddToTreeView(TreeNode node)

{

treeView1.Nodes.Add(node);

treeView1.Refresh();

}

/// <summary>

/// 递归加载指定目录下的所有子目录和文件树

/// </summary>

/// <param name="reg">指定目录路径</param>

/// <param name="nodes">起始树,将在它下面建立所有子结点</param>

internal void LoadFolderFileList(string path, TreeNode nodes)

{

string[] dirs = Directory.GetDirectories(path);

string[] files = Directory.GetFiles(path);

for (int i = 0; i < dirs.Length; i++)

{

string[] info = new string[4];

DirectoryInfo di = new DirectoryInfo(dirs[i]);

TreeNode node = new TreeNode(di.Name);

node.Tag = di.FullName;

try

{

if (di.GetDirectories().Length > 0 || di.GetFiles().Length > 0)

{

LoadFolderFileList(di.FullName, node);

}

else

{

continue;

}

}

catch

{

continue;

}

nodes.Nodes.Add(node);

}

for (int i = 0; i < files.Length; i++)

{

FileInfo fi = new FileInfo(files[i]);

TreeNode node = new TreeNode(fi.Name);

node.Tag=fi.FullName;

nodes.Nodes.Add(node);

}

}

#endregion

#region 按钮事件

private void button1_Click(object sender, EventArgs e)

{

FolderBrowserDialog myFolderBrowserDialog = new FolderBrowserDialog();

myFolderBrowserDialog.ShowDialog();

if (myFolderBrowserDialog.SelectedPath != "")

{

CurrentFolderPath = myFolderBrowserDialog.SelectedPath;

Thread thread = new Thread(new ThreadStart(LoadFolderMethod));

thread.Start();

}

}

#endregion

#region 线程方法

/// <summary>

/// 获取指定目录下的所有子目录和文件

/// </summary>

private void LoadFolderMethod()

{

UpdateTreeViewDelegate loadTreeView = new UpdateTreeViewDelegate(AddToTreeView);

string[] myPath=CurrentFolderPath.Split('\\');

TreeNode node=new TreeNode();

string path;

foreach (string s in myPath)

{

path=s+"\\";

node = new TreeNode(s);

node.Tag = path;

}

LoadFolderFileList(CurrentFolderPath, node);

if (treeView1.InvokeRequired)//将读取的根加载至TreeView

treeView1.BeginInvoke(loadTreeView, node);

else

{

treeView1.Nodes.Add(node);

}

}

#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐