如题 ~~~~~~~~~~~~~~~~~~~~~~~~~                                       

解决方案 »

  1.   


          private void button3_Click(object sender, EventArgs e)
            {
                if (backgroundWorker1.IsBusy)
                {
                    return;
                }
                backgroundWorker1.RunWorkerAsync(new Caobject(serverurl.Text, localurl.Text));
                
            }        /// <summary>
            /// 递归核心
            /// </summary>
            /// <param name="SerUrl"></param>
            /// <param name="LocUrl"></param>
            private void Dir(string SerUrl, string LocUrl)
            {            DirectoryInfo dirser = new DirectoryInfo(SerUrl);
                DirectoryInfo[] adirser = dirser.GetDirectories();
                DirectoryInfo dirloc = new DirectoryInfo(LocUrl);
                DirectoryInfo[] adirloc = dirloc.GetDirectories();            CopyFiles(SerUrl, LocUrl);
                foreach (DirectoryInfo adirsers in adirser)
                {
                    string DirFullName = LocUrl + "\\" + adirsers.Name;
                    if (!Directory.Exists(DirFullName))
                    {
                        Directory.CreateDirectory(DirFullName);
                    }
                    Dir(adirsers.FullName, DirFullName);
                }
            }        /// <summary>
            /// 复制文件
            /// </summary>
            private void CopyFiles(string SerUrl, string LocUrl)
            {
                string[] serfilenames = Directory.GetFiles(SerUrl).Select(s => System.IO.Path.GetFileName(s)).ToArray();
                string[] locfilenames = Directory.GetFiles(LocUrl).Select(s => System.IO.Path.GetFileName(s)).ToArray();
                foreach (string serurl in serfilenames)
                {
                    FileInfo SerFile = new FileInfo(SerUrl + "\\" + serurl);
                    string SerFileLastWriteTime = SerFile.LastWriteTime.ToString();
                    string SerFileName = SerFile.Name.ToString();                string SerFileUrl = SerUrl + "\\" + SerFileName;
                    string LocFileUrl = LocUrl + "\\" + SerFileName;                FileInfo LocFile = new FileInfo(LocUrl + "\\" + SerFileName);
                    string LocFileLastWriteTime = LocFile.LastWriteTime.ToString();                if (SerFileLastWriteTime != LocFileLastWriteTime)
                    {
                        try
                        {
                            File.Copy(SerFileUrl, LocFileUrl, true);
                        }
                        catch
                        {
                            MessageBox.Show("文件" + SerFileUrl + "被某人打开着,无法复制");
                        }
                    }            }
            }               private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {   
                BackgroundWorker worker = sender as BackgroundWorker;               
               
                string ser = serverurl.Text;
                string loc = localurl.Text;
                    Dir(ser, loc);
               
                 //backgroundWorker1.ReportProgress(100); 
            }
               private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                progressBar1.Value = e.ProgressPercentage;
            }被自己写死了。。怎么把值传过来设置进度呢。。
      

  2.   

    具体可以参考下这个博文实现:
    http://www.cnblogs.com/zhili/archive/2013/05/11/EAP.html