从数组C#下载多个文件

时间:2010-03-22 14:13:47

标签: c# arrays webclient download

我有一个我想下载的文件名数组。

数组当前包含在字符串[]中,它在BackgroundWorker中工作。

我想要做的是使用该数组下载文件并将结果输出到进度条,该进度条将告诉我离开完成的时间有多长。

有没有办法可以做到这一点。

感谢。

3 个答案:

答案 0 :(得分:1)

如果你从后台工作者处理这个问题,那么你就有1个线程来完成所有的I / O操作。没关系,但也许不是最快的。

backgroundworker有一个ProgressChanged事件,一个ReportProgress()方法和一个Supportsprogress属性。

  1. 将属性设置为true
  2. 致电DoWork的ReportProgress(百分比)
  3. 处理ProgressChanged事件以设置进度条。

答案 1 :(得分:1)

使用WebClient下载文件,有一个名为“DownloadFile”的方法。

伪码

foreach(var url in listOfStringURLS)
{
    WebClient.DownloadFile(url, ".");
    updateProgressBar();
}

这是简单的部分!现在,您需要知道在使用BackgroundWorker时,您不再使用GUI线程,这意味着您无法在不使用Delegate的情况下更新ProgressBar!看看这个:“Progress Bar Delegate”。

适用于.NET 4.0

您可能希望并行化下载!您可以通过查看任务轻松地使用.NET 4.0,检查this blog about Paralell Programming。否则你会像另一张海报所说的那样在1个线程上拥有所有IO,这可能没有那么优化。

答案 2 :(得分:0)

只需使用:ReportProgress((100 * currentItem)/ list.Count)并让BackgroundWorker.ProgressChanged事件处理程序更新进度条(您可能必须检查是否需要调用并使用invoke进行更新)。

然后,ProgressChanged事件处理程序可以计算剩余时间。

如果元素的大小变化很大,这就不准确了。

您可能希望查看http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadfileasync.aspx,这样就无需单独的后台工作人员。