나는 그게 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
과 같기 때문입니다. 여기서 무슨 일이 일어나고있는거야?
나는 본다. 3.5 대신에 .NET 4.0을 대상으로 프로젝트를 변경했으며 실제로 완벽하게 작동합니다. 그러나 대부분의 사용자가 여전히 .NET 3.5를 사용하고 내 응용 프로그램 용으로 4.0을 설치하지 않으므로 .NET 4.0을 사용하고 싶지 않습니다. 가능한 해결 방법이 있습니까? UploadValues () 메서드를 다른 스레드에서 사용해야하고 GUI를 직접 업데이트해야합니까? – dimski
@ dimski, 청크로 요청 스트림에 직접 작성하여 진행 상황을 직접 구현해야합니다. 매우 편리한 메소드 인 경우에도 'UploadValuesAsync'를 사용할 수 없습니다. 따라서 OpenWriteAsync 메소드를 사용하여 청크로 요청 스트림에 직접 쓰고 커스텀 이벤트를 호출하여 진행 상황을보고 할 수 있습니다. –
알았어요. 답장을 보내 주셔서 감사합니다. – dimski