я использую 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
Кто-то может указать на проблему мне?
Если вы хотите отслеживать ход загрузки, вам нужно использовать UploadFileAsync вместо UploadData.
С помощью UploadDataAsync вы должны вручную выполнить фрагментацию файла и отобразить прогресс (по крайней мере, это я определил по собственному опыту в данном вопросе, хотя я не видел, чтобы он был написан как таковой на MSDN).
Вместо этого вы ищете UploadFileAsync, который корректно вызовет событие UploadProgressChanged. После этого вы можете просмотреть свойства аргументов события BytesSent и TotalBytesToSend, которые должны быть корректно отражены.
Я полагаю, что это объясняется тем, что при отправке данных вы можете перехватывать куски потока данных и вручную увеличивать трекер прогресса, в то время как при работе с файлом вы не можете (.NET будет управлять загрузкой всего за вас). Лично я считаю, что в случае UploadDataAsync что-то не так, потому что нет причин вызывать событие UploadProgressChanged с информацией invalid - либо он вызывается с достоверной, корректной информацией, либо не вызывается вообще.
Во всяком случае, сделайте снимок UploadFileAsync и посмотрите, как это происходит.