2014-01-05 1 views
1

서버에서 웹 클라이언트가있는 파일을 다운로드하려고합니다. 이것은 매우 효과적입니다. 그러나 진행률 표시 줄에 다운로드 진행률을 표시하려고 시도 할 때 진행률이 향상되지 않습니다.웹 클라이언트 진행률이 진행률 표시 줄에 나타나지 않습니다.

DownloadFileAsync -method와 함께 파일을 다운로드하려고합니다. 성능 문제를 방지하거나 정지시키기 위해 자체 스레드를 모두 가지고 있습니다.

private WebClient updateDownloader = new WebClient(); 

이것은 Form.Shown - 이벤트의 해당과 같습니다 :

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

그것은 시도 블록에

나는 어떤 잠수함 또는 이벤트 외부 웹 클라이언트를 선언했다.

는 내가 진행 막대에 진행 상황을 보여주기 위해 그런 서브를 만든 :

updateDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 

이에서 작동합니다 : 나는 이벤트 핸들러를 만든 폼로드 - 이벤트에서

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

이론이지만, 나는 이미 MSDN을 방문하여 일부 방법 만 작동한다는 정보를 보았지만이를 구현하는 것이 도움이되지 못했습니다.

결코 도달 할 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 더 많은 코드 부분이 필요하면 알려주세요.

+0

이 [답변] 읽기 (http://stackoverflow.com/questions/9459225/asynchronous-file-download-with- 진행 표시 줄). 이 좋은 표본. –

+0

Mr.kto 불행히도 이것은 도움이되지 않았습니다.이 스레드의 op에는 방금 동결에 문제가 있었기 때문에 도움이되지 않았습니다. 그러나 그는이를 고쳐서 진행 상황을 볼 수있었습니다. 제 생각에는 코드가 거의 같지만 오류를 찾을 수 없습니다. 내 생각에, 나는 이제 막 완전히 혼수 상태에 빠졌습니다. 왜냐하면 저는 한 시간이 지난 지금 그것을 다루고 있기 때문입니다. –

+0

파일 크기는 무엇입니까? 너무 큽니까? 또는 느린 연결이 있습니까? 이것을 시도해 볼 수 있습니까? label1.Text = e.BytesReceived.ToString(); ProgressChanged 이벤트에서 결과를 얻었는지 확인하십시오! –

답변

-1

기본 UI 스레드에서 progresbar를 업데이트해야합니다. 다른 스레드에서 직접 UI를 업데이트 할 수 없습니다.

+0

나는 호출과 함께이 작업을 이미 시도했지만 작동하지 않았다. 알다시피, 어떻게 할 수 있니? –

0

당신이 당신의 '나타낸 바와 같은'를 수정하려고 했 이벤트가 될 수 :

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

Application.DoEvents는 좋은 해결책이 아닙니다. 위의 의견에 해결책을 게시했습니다. –

관련 문제