问题描述
我有一个 WebClient,用于通过以下方式上传文件,base64Encoded 是编码为 base64 字符串的图片,这是 imgur 服务器所期望的:
I have a WebClient which I use to upload a file in the following way, base64Encoded is a picture encoded as a base64 string as that is what the imgur server expects:
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 的事件处理程序:
This is the event handler for the UploadProgressChanged:
private void webClient_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
int percentage = e.ProgressPercentage * 2;
progressBar.Value = percentage;
percentageTextBlock.Text = (percentage).ToString() + "%";
}
现在我的问题是事件处理程序在开始时只调用一次,报告 ProgressPercentage
为 50,然后不再被调用.文件上传成功,但我的进度条不工作.这不是因为我正在上传一个小文件,因为我也尝试了几个 mb 的文件,这些文件也立即报告了 50 的 ProgressPercentage
.e.BytesSent
也没有帮助,因为它也等于 e.TotalBytesToSend
.这是怎么回事?
Now my problem is that the event handler is only called once right at the start, reports a ProgressPercentage
of 50 and is then not being called anymore. The file uploads successfully, but my progressbar is not working. This is not because I'm uploading a small file as I've also tried this with files of several mb which also report a ProgressPercentage
of 50 right away. e.BytesSent
is no help either because that one is equal to e.TotalBytesToSend
right away as well. What is going on here?
推荐答案
有一个 此事件的错误,已在 .NET 4.0 中修复.这是相关帖子.
There was a bug with this event which was fixed in .NET 4.0. And here's a related post.
这篇关于WebClient.UploadValuesAsync 未正确更新进度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!