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

来源:互联网 发布:软件开发项目进度表 编辑:程序博客网 时间:2024/04/30 10:53
 

界面设计步骤:

从工具箱中拖放一个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

原创粉丝点击