2014-01-05 53 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不是一个好的解决方案。我在上面的评论中发布了解决方案。 –