FTP 下载后台辅助角色



我有这个代码可以从ftp下载,想把它放到后台工作线程中。

void BtnDownloadClick(object sender, EventArgs e)
{
    FolderBrowserDialog fldDlg = new FolderBrowserDialog();
    if (fldDlg.ShowDialog() == DialogResult.OK)
            Download(fldDlg.SelectedPath, lstFiles.SelectedItem.ToString());    
}
private void Download(string filePath, string fileName)
        {
            FtpWebRequest reqFTP;
            try
            {
                FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + PathFolders + "/" + fileName));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(Username, Password);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }       
}

你可以帮我吗?我是C#的新手...

提前谢谢你!

简单的方法是使用:

Task.Factory.StartNew(() => Download(fldDlg.SelectedPath, lstFiles.SelectedItem.ToString());

这将使用同步任务来完成您的下载。 由于您的 UI 不依赖于下载中的任何代码,因此可以正常工作。如果您的下载过程需要在完成后集成回您的 UI 中,那么您最好使用 BackgroundWorker。但是,在这种情况下,我认为您可以使用任务。

最新更新