【问题标题】:Webclient progress will not show up in progressbarWebclient 进度不会显示在进度条中
【发布时间】: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 事件中,看看你是否得到任何结果!
  • 我已经解决了。我只是将事件处理程序设置在错误的位置。

标签: c# .net


【解决方案1】:

您是否尝试将“显示表单”事件修改为:

Application.DoEvents();
updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave);

【讨论】:

  • Application.DoEvents 不是一个好的解决方案。我在上面的评论中发布了解决方案。
【解决方案2】:

您需要从主 UI 线程更新进度条。您不能直接从其他线程更新 UI。

【讨论】:

  • 我已经尝试通过调用来执行此操作,但效果不佳。你知道,我该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多