WebClient.UploadValuesAsync未正确更新进度

时间:2011-01-22 14:37:06

标签: c# .net progress-bar webclient

我有一个WebClient,用于按以下方式上传文件,base64Encoded是一个编码为base64字符串的图片,因为这是imgur服务器所期望的:

    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() + "%";
    }

现在我的问题是事件处理程序仅在开始时调用一次,报告ProgressPercentage为50,然后不再被调用。文件上传成功,但我的进度条无效。这不是因为我上传了一个小文件,因为我还尝试了几个mb的文件,它也会立即报告ProgressPercentage的50个文件。 e.BytesSent也没有任何帮助,因为它也会立即等于e.TotalBytesToSend。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

在.NET 4.0中修复了bug with this event。这是一个related post