WebClient.UploadValuesAsync неправильно обновляет прогресс - PullRequest
0 голосов
/ 22 января 2011

У меня есть 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 и больше не вызывается. Файл успешно загружен, но мой индикатор не работает. Это не потому, что я загружаю небольшой файл, поскольку я также пробовал это с файлами размером несколько мегабайт, которые также сразу сообщают о ProgressPercentage из 50. e.BytesSent тоже не поможет, потому что он тоже равен e.TotalBytesToSend. Что здесь происходит?

1 Ответ

1 голос
/ 22 января 2011

Была ошибка с этим событием , которая была исправлена ​​в .NET 4.0. А вот связанный пост .

...