2014-01-05 50 views
1

我正嘗試從服務器下載帶有webclient的文件。這工作非常好。但是,當我嘗試在進度條中顯示下載進度時,它不會讓我看到任何進度。Webclient進度不會顯示在進度條中

我試圖下載該文件與DownloadFileAsync - 方法有一個自己的線程,以防止性能問題或凍結。

我宣佈任何潛艇或事件以外的Web客戶端:

private WebClient updateDownloader = new WebClient(); 

這看起來像在Form.Shown - 活動:

updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave); 

它是try塊。

我創造了這樣的一個子顯示進度的進度:

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
{ 
    progressBar1.Value = e.ProgressPercentage; 
} 

表負載 - 活動我創建的事件處理程序:

updateDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 

這應該工作在理論,但它沒有,我已經訪問MSDN,看到一些信息,只有一些方法正在工作,但實施這並沒有幫助。

它從來沒有達到這一個。我究竟做錯了什麼?如果你需要更多的代碼部分,告訴我。

+0

閱讀【答案】(http://stackoverflow.com/questions/9459225/asynchronous-file-download-with-進度條)。這個好樣品。 –

+0

Mr.kto不幸的是,這並沒有幫助,因爲這個線程中的操作只是遇到了凍結的問題,但是當他修復這個問題時,他可以看到進度。我想,我的代碼幾乎是一樣的,但我找不到錯誤。我想,我完全失明瞭,因爲我現在正在處理一小時以後的事情。 –

+0

什麼是文件大小?它太大了嗎?或連接速度緩慢?你可以試試這個label1.Text = e.BytesReceived.ToString();在你的ProgressChanged事件中,看看你是否得到任何結果! –

回答

-1

您需要從主UI線程更新progresbar。您無法直接從其他線程更新UI。

+0

我已經試着用調用來做到這一點,但它沒有起作用。 你知道嗎,我該怎麼做? –

0

你嘗試修改「形式示」事件是:

Application.DoEvents(); 
updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave); 
+0

Application.DoEvents不是一個好的解決方案。我在上面的評論中發佈瞭解決方案。 –