2011-01-22 7 views
0

나는 그게 imgur 서버가 예상하는대로 나는 다음과 같은 방법으로 파일을 업로드하는 데 사용하는 웹 클라이언트는, base64Encoded는 base64로 문자열로 인코딩 된 사진입니다 있습니다WebClient.UploadValuesAsync 업데이트되지 진행 제대로

public Upload() 
    { 
     WebClient webClient = new WebClient(); 
     webClient.UploadProgressChanged += new UploadProgressChangedEventHandler(webClient_UploadProgressChanged); 
     webClient.UploadValuesCompleted += new UploadValuesCompletedEventHandler(webClient_UploadValuesCompleted);  

     NameValueCollection values = new NameValueCollection(); 
     values.Add("key", "imgur api key"); 
     values.Add("image", base64Encoded); 
     webClient.UploadValuesAsync(new Uri("http://api.imgur.com/2/upload"), "POST", values);   
    } 

이것은 UploadProgressChanged에 대한 이벤트 핸들러 :

private void webClient_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e) 
    { 
     int percentage = e.ProgressPercentage * 2; 

     progressBar.Value = percentage; 
     percentageTextBlock.Text = (percentage).ToString() + "%"; 
    } 

이제 내 문제는 이벤트 핸들러 만 바로 시작 한 번 호출이다, (50)의 ProgressPercentage보고 한 후 더 이상 호출되지 않습니다. 파일이 성공적으로 업로드되지만 진행 표시 줄이 작동하지 않습니다. 이것은 내가 작은 파일을 업로드하고 있기 때문이 아닙니다. 나는 또한이 파일을 수백 메가 바이트의 파일로 시도 했으므로 ProgressPercentage이 곧바로 50이라고보고합니다. e.BytesSent도 도움이되지 않습니다. 왜냐하면 그 중 하나가 즉시 e.TotalBytesToSend과 같기 때문입니다. 여기서 무슨 일이 일어나고있는거야?

답변

1

bug with this event이 .NET 4.0에서 수정되었습니다. 여기에 related post이 있습니다.

+0

나는 본다. 3.5 대신에 .NET 4.0을 대상으로 프로젝트를 변경했으며 실제로 완벽하게 작동합니다. 그러나 대부분의 사용자가 여전히 .NET 3.5를 사용하고 내 응용 프로그램 용으로 4.0을 설치하지 않으므로 .NET 4.0을 사용하고 싶지 않습니다. 가능한 해결 방법이 있습니까? UploadValues ​​() 메서드를 다른 스레드에서 사용해야하고 GUI를 직접 업데이트해야합니까? – dimski

+0

@ dimski, 청크로 요청 스트림에 직접 작성하여 진행 상황을 직접 구현해야합니다. 매우 편리한 메소드 인 경우에도 'UploadValuesAsync'를 사용할 수 없습니다. 따라서 OpenWriteAsync 메소드를 사용하여 청크로 요청 스트림에 직접 쓰고 커스텀 이벤트를 호출하여 진행 상황을보고 할 수 있습니다. –

+0

알았어요. 답장을 보내 주셔서 감사합니다. – dimski

관련 문제