我有一個我想要下載的文件名的數組。從數組下載多個文件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