Хорошо, я посмотрю на это, спасибо за ваши ответы.

я есть 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)

Решение Вопроса

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

 Mark Krijgsman22 янв. 2011 г., 16:31
Хорошо, я посмотрю на это, спасибо за ваши ответы.
 Darin Dimitrov22 янв. 2011 г., 16:24
@dimski, вам нужно будет реализовать прогресс самостоятельно, записав его напрямую в поток запросов. Я боюсь, что вы не можете использоватьUploadValuesAsync даже если это очень удобный метод. Таким образом, вы могли бы использоватьOpenWriteAsync метод и запись непосредственно в поток запросов в чанках и вызывая некоторое пользовательское событие, чтобы сообщить о прогрессе.
 Mark Krijgsman22 янв. 2011 г., 16:21
Понимаю. Я изменил свой проект на целевой .NET 4.0 вместо 3.5, и он действительно работает очень хорошо. Однако я пока не хочу использовать .NET 4.0, потому что большинство моих пользователей все еще будут использовать .NET 3.5 и не захотят устанавливать 4.0 только для моего приложения. Возможен ли обходной путь? Должен ли я использовать метод UploadValues ​​() в другом потоке, а затем обновлять графический интерфейс самостоятельно?

Ваш ответ на вопрос