2010-03-22 89 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,它不需要單獨的後臺工作者。