Процент прогресса WebClient AsyncUpload всегда возвращает 50%

я использую Webclient для загрузки данных с помощью Асинхронного вызова для сервера,

    WebClient webClient = new WebClient();
   webClient.UploadDataAsync(uri , "PUT", buffer, userToken);

я присоединил События DatauploadProgress и DatauploadCompleted для адаптации функций обратного вызова

        // Upload Date Progress
        webClient.UploadProgressChanged += new 
        UploadProgressChangedEventHandler(UploadProgressCallback);

      // Upload Date Progress
     void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
    {
        // Magic goes here 
     logger.writeToLog("Percentage =" + e.ProgressPercentage);
    }

e.ProgressPercentage всегда возвраты 50 .. то независимо от того, чем размер загруженного файла был (попробовало различные размеры между 10 КБ к 60 МБ). сама функция вызвана только дважды (действительно быстро также), и процент показывает 50!.. который нелогичен особенно с большими файлами...

e.BytesSent не помогает также.. это всегда показывает размер файлов в байтах :S (исключая: если бы размер файла был 63,000, то я добрался бы e.BytesSent = 63,000и e.ProgressPercentage= 50

Кто-то может указать на проблему мне?

5
задан Mahmoud Al-Qudsi 26 January 2010 в 17:04
поделиться

1 ответ

Если вы хотите отслеживать ход загрузки, вам нужно использовать UploadFileAsync вместо UploadData.

С помощью UploadDataAsync вы должны вручную выполнить фрагментацию файла и отобразить прогресс (по крайней мере, это я определил по собственному опыту в данном вопросе, хотя я не видел, чтобы он был написан как таковой на MSDN).

Вместо этого вы ищете UploadFileAsync, который корректно вызовет событие UploadProgressChanged. После этого вы можете просмотреть свойства аргументов события BytesSent и TotalBytesToSend, которые должны быть корректно отражены.

Я полагаю, что это объясняется тем, что при отправке данных вы можете перехватывать куски потока данных и вручную увеличивать трекер прогресса, в то время как при работе с файлом вы не можете (.NET будет управлять загрузкой всего за вас). Лично я считаю, что в случае UploadDataAsync что-то не так, потому что нет причин вызывать событие UploadProgressChanged с информацией invalid - либо он вызывается с достоверной, корректной информацией, либо не вызывается вообще.

Во всяком случае, сделайте снимок UploadFileAsync и посмотрите, как это происходит.

7
ответ дан 14 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: