【发布时间】:2014-01-05 22:09:50
【问题描述】:
我正在尝试使用 Web 客户端从服务器下载文件。这很好用。但是当我尝试在进度条中显示下载进度时,它并没有让我看到任何进度。
我正在尝试使用 DownloadFileAsync 方法下载文件,以便为所有文件创建一个自己的线程,以防止出现性能问题或冻结。
我在任何子或事件之外声明了 WebClient:
private WebClient updateDownloader = new WebClient();
这看起来像 Form.Shown-Event:
updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave);
它在一个 Try-Block 中。
我创建了一个这样的子来显示进度条的进度:
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
在 Form-Load-Event 中我创建了事件处理程序:
updateDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
理论上这应该可行,但实际上并没有,我已经访问过 MSDN 并看到一些信息,表明只有某些方法有效,但实现这一点并没有帮助。
它永远不会到达这个。我究竟做错了什么?如果您需要更多代码部分,请告诉我。
【问题讨论】:
-
阅读此answer。这个很好的样本。
-
Mr.kto 不幸的是,这并没有帮助,因为这个线程中的操作只是出现了冻结的问题,但是当他修复这个问题时,他可以看到进度。我认为,我的代码几乎相同,但我找不到错误。我想,我完全是瞎子,因为我现在已经处理了一个小时。
-
文件大小是多少?是不是太大了?还是连接速度慢?你能试试这个 label1.Text = e.BytesReceived.ToString();在你的 ProgressChanged 事件中,看看你是否得到任何结果!
-
我已经解决了。我只是将事件处理程序设置在错误的位置。