我有一个我想要下载的文件名的数组。从数组下载多个文件C#
该数组当前包含在一个字符串[]中,它在BackgroundWorker中工作。
我想要做的就是使用该数组下载文件并将结果输出到进度条中,该进度条会告诉我我离开完成的时间。
有没有一种方法可以做到这一点。
谢谢。
我有一个我想要下载的文件名的数组。从数组下载多个文件C#
该数组当前包含在一个字符串[]中,它在BackgroundWorker中工作。
我想要做的就是使用该数组下载文件并将结果输出到进度条中,该进度条会告诉我我离开完成的时间。
有没有一种方法可以做到这一点。
谢谢。
使用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个线程正在处理您的所有I/O。这是好的,但也许不是最快的。
backgroundworker有一个ProgressChanged事件,一个ReportProgress()方法和一个Supportsprogress属性。
只需使用:ReportProgress((100 * CURRENTITEM)/ list.Count),并让BackgroundWorker.ProgressChanged事件处理程序更新进度条(你可能要检查是否需要调用和使用调用更新)。
ProgressChanged事件处理程序可以计算剩余时间。
Ofc如果元素的大小变化很大,这不是精确的。
您可能想看看http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadfileasync.aspx,它不需要单独的后台工作者。
你有多远?你有什么尝试?你有什么问题? – 2010-03-22 14:17:46