Example #1
0
        /// <summary>
        /// 重置一个节点
        /// </summary>
        /// <param name="tn"></param>
        /// <param name="acbCallback"></param>
        /// <param name="state"></param>
        private void ReLoadNode(TreeNode tn, AsyncCallback acbCallback = null, object state = null)
        {
            FileType ft    = FileType.磁盘;
            var      mytag = tn.Tag as myNodeTag;

            if (mytag != null)
            {
                ft = mytag.FileType;
            }
            var parent = tn.Parent;
            var idx    = tn.Index;

            tn.Remove();
            tn.Nodes.Clear();
            if (acbCallback == null)
            {
                state       = tn;
                acbCallback = ar =>
                {
                    if (parent == null)
                    {
                        SetNodeIdx(tn, 3);
                    }
                    else
                    {
                        AddChildNode(parent, tn, ft == FileType.文件, idx);
                    }
                };
            }
            if (ft == FileType.文件)
            {
                var fi = ((tn.Tag as myNodeTag).Tag as FileInfo);
                fi.Refresh();
                if (!fi.Exists)
                {
                    ReLoadNode(parent);//不存在就刷新父节点
                    return;
                }
                AddChildNode(parent, tn, ft == FileType.文件, idx);
                return;
            }
            GetInDirectoryFiles handler = new GetInDirectoryFiles(GetInDirectoryFiles);
            IAsyncResult        result  = handler.BeginInvoke(tn, acbCallback, state);
        }