private void DownloadFilesAsync(object sender, System.ComponentModel.DoWorkEventArgs e) { AsyncDataStruct ads = (AsyncDataStruct)e.Argument; System.ComponentModel.BackgroundWorker worker = sender as System.ComponentModel.BackgroundWorker; // FTPLib.FtpClient ftp = FTP; int perc, old_perc = 0; // foreach (string remotePath in ads.FileList) { if (worker.CancellationPending) { break; } // open the file on the server and localy string remoteFilePath = System.IO.Path.GetDirectoryName(remotePath); string remoteFileName = System.IO.Path.GetFileName(remotePath); // ftp.ChangeDir(remoteFilePath); ftp.OpenDownload(remotePath, System.IO.Path.Combine(ads.Directory.FullName, remoteFileName), false); // download the file (read it from server, write it to disk) while (true) { perc = ftp.DoDownload(); // No need to report progress everytime we get some bytes // because it causes a flickery effect on the screen in most cases. if (perc > old_perc) { worker.ReportProgress(perc, remoteFileName); } // is the download done? if (perc == 100) { break; } old_perc = perc; } } }
public void DownloadFiles(System.Collections.Specialized.StringCollection fileList, System.IO.DirectoryInfo directoryInfo, System.ComponentModel.ProgressChangedEventHandler progressChangedEventHandler, System.ComponentModel.RunWorkerCompletedEventHandler runWorkerCompletedEventHandler) { System.ComponentModel.BackgroundWorker worker = new System.ComponentModel.BackgroundWorker(); if (progressChangedEventHandler != null) { worker.ProgressChanged += progressChangedEventHandler; worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; } if (runWorkerCompletedEventHandler != null) { worker.RunWorkerCompleted += runWorkerCompletedEventHandler; } worker.DoWork += new System.ComponentModel.DoWorkEventHandler(DownloadFilesAsync); AsyncDataStruct ads = new AsyncDataStruct(); ads.Directory = directoryInfo; ads.FileList = fileList; worker.RunWorkerAsync(ads); }
public void DownloadFiles(System.Collections.Specialized.StringCollection fileList, System.IO.DirectoryInfo directoryInfo, System.ComponentModel.ProgressChangedEventHandler progressChangedEventHandler, System.ComponentModel.RunWorkerCompletedEventHandler runWorkerCompletedEventHandler) { System.ComponentModel.BackgroundWorker worker = new System.ComponentModel.BackgroundWorker(); if(progressChangedEventHandler!=null) { worker.ProgressChanged += progressChangedEventHandler; worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; } if(runWorkerCompletedEventHandler!=null) { worker.RunWorkerCompleted += runWorkerCompletedEventHandler; } worker.DoWork += new System.ComponentModel.DoWorkEventHandler(DownloadFilesAsync); AsyncDataStruct ads = new AsyncDataStruct(); ads.Directory = directoryInfo; ads.FileList = fileList; worker.RunWorkerAsync(ads); }