2010-03-22 88 views
1

我有一个我想要下载的文件名的数组。从数组下载多个文件C#

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

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

有没有一种方法可以做到这一点。

谢谢。

+3

你有多远?你有什么尝试?你有什么问题? – 2010-03-22 14:17:46

回答

1

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

伪代码

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

这是比较容易的部分!现在,您需要知道,当您使用BackgroundWorker时,您不再处于GUI线程中,这意味着您无法在不使用委托的情况下更新ProgressBar!看看这个:“Progress Bar Delegate”。

对于.NET 4.0

您可能希望并行化下载!通过查看任务,您可以使用.NET 4.0轻松完成此任务,请检查this blog about Paralell Programming。否则,你会,因为另一张海报说,所有的IO线程,可能不是那么优化。

1

如果您从后台处理程序处理此问题,您有1个线程正在处理您的所有I/O。这是好的,但也许不是最快的。

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

  1. 设置属性为true
  2. 调用ReportProgress(百分比)来回回的DoWork
  3. 处理ProgressChanged事件来设置的进度。
0

只需使用:ReportProgress((100 * CURRENTITEM)/ list.Count),并让BackgroundWorker.ProgressChanged事件处理程序更新进度条(你可能要检查是否需要调用和使用调用更新)。

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

Ofc如果元素的大小变化很大,这不是精确的。

您可能想看看http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadfileasync.aspx,它不需要单独的后台工作者。