2010-01-26 2 views
5

я использую WebClient для загрузки данных с помощью асинхронного вызова на сервер,WebClient AsyncUpload всегда возвращает 50%

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 .. независимо от того, какой размер загружаемого файла был (пробовал разные размеры между 10kb до 60mb). сама функция называется только дважды (очень быстро), а процент показывает 50! .., который нелогичен специально с большими файлами ...

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

Может кто-то момент проблемы ко мне?

+0

Действительно ли UploadDataAsync поддерживает метод PUT? – jayarjo

ответ

7

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

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

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

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

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

+0

+1 за то, что уделил вам время, чтобы предоставить этот подробный ответ, я проверю его и вернусь :) –

+1

Thx, протестировал его, и он решил проблему: S, но я нахожу это своего рода глупо и нелогично .. –

Смежные вопросы