【问题标题】:Progress bar and webclient进度条和网络客户端
【发布时间】:2010-11-13 10:59:35
【问题描述】:

我有一个大约需要 10-30 秒的事件,即从页面下载信息(流量很大),对其进行修改,然后使用 WebClient 将其保存到磁盘的某个位置。因为需要这么长的时间,所以我想添加一个进度条或制作一个更新标签(上面写着更新..)来指示进度。

有人可以指导我如何做到这一点吗? WebClient 中是否有任何事件可以用来处理这个问题?

【问题讨论】:

标签: c# download progress-bar webclient


【解决方案1】:

如果您正在编写 Windows 窗体客户端应用程序(不是 ASP.NET 服务器端组件),则可以按如下方式显示 WebClient 下载进度:

WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += (s, e) =>
{
    progressBar.Value = e.ProgressPercentage;
};
webClient.DownloadFileCompleted += (s, e) =>
{
    progressBar.Visible = false;
    // any other code to process the file
};
webClient.DownloadFileAsync(new Uri("http://example.com/largefile.dat"),
    @"C:\Path\To\Output.dat");

progressBar 是表单上 ProgressBar 对象的 ID。)

【讨论】:

  • 这里的(s, e) 位在做什么?
  • @Moshe 这是一个接受两个参数的 lambda 表达式 (msdn.microsoft.com/en-us/library/bb397687.aspx);这里它用于简洁地添加一个匿名委托作为事件处理程序。
  • 你好,布拉德利!我想知道......你的回答太棒了,我有一个简单的问题。 DownloadFileAsync,如果我尝试从互联网上下载.exe,直接下载到另一个.exe,它会用下载的.exe 的数据“更新”.exe吗?使用DownloadFileAsync?示例:我创建了一个应用程序(.exe),它显示Hello World 然后关闭;然后我会创建另一个,改为Goodbye World,然后将其上传到网站——如果我将Goodbye World 文件下载到Hello World 文件,它会用新的.exe 覆盖旧的.exe 吗?谢谢! :)
  • :D 这正是我想要的 :) 谢谢!
  • 确保 .exe 没有运行。
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多