FTP 下载后台辅助角色
本文关键字:角色 后台 下载 FTP | 更新日期: 2023-09-27 17:56:36
我有这个代码可以从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。但是,在这种情况下,我认为您可以使用任务。