【发布时间】:2018-05-21 16:48:05
【问题描述】:
我正在使用 BackgroundWorker 从 ftp 服务器下载文件,但只有在文件下载完成后进度才会更新。
进度条保持在 0,在下载期间冻结,并设置为 100。
这是我的代码:
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) {
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(activeDownload.ftpPath);
request.Credentials = new NetworkCredential(ftpUser, ftpPass);
request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
using (FileStream writer = new FileStream(activeDownload.localPath, FileMode.Create)) {
long length = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[2048];
long bytesread = 0;
backgroundWorker1.ReportProgress(0);
readCount = responseStream.Read(buffer, 0, bufferSize);
while (readCount > 0) {
bytesread += readCount;
writer.Write(buffer, 0, readCount);
backgroundWorker1.ReportProgress((int)(bytesread / activeDownload.fileSize) * 100);
readCount = responseStream.Read(buffer, 0, bufferSize);
}
}
response.Close();
responseStream.Close();
}
private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) {
progressBar1.Value = e.ProgressPercentage;
}
我做错了什么?任何帮助将不胜感激。
【问题讨论】:
-
你能说一下这是一个什么样的项目,好吗?某些项目(例如 VSTO)与 BGW 的行为不符,需要额外的功能才能使其正常工作
-
那么您是否调试过您提供给
ReportProgress的信息或进度条渲染问题?添加一些Debug.WriteLine。 + 我们需要minimal reproducible example。 -
我已经找到了解决方案。更多详情如下。
标签: c# .net download ftp progress-bar