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
..无论上传的文件大小是多少(尝试10kb到60mb之间的不同大小)。 函数本身只被调用两次(真的很快),百分比显示50! ..特别是大文件不合逻辑……
e.BytesSent
也没有帮助..总是以字节为单位显示文件大小:S(例如:如果文件大小为63,000,我会得到e.BytesSent = 63,000
和e.ProgressPercentage= 50
有人能指出问题给我吗?
如果要监视上载的进度,则需要使用UploadFileAsync而不是UploadData。
使用UploadDataAsync,你应该手动chunk文件并显示进度(至少,这是我根据自己的经验确定的事情虽然我没有看到它在MSDN上这样写)。
您正在寻找的是使用UploadFileAsync,它将正确调用UploadProgressChanged事件。 然后,您可以查看应正确反映的事件args属性BytesSent和TotalBytesToSend。
我假设这背后的基本原理是,当您发送数据时,您可以循环数据流的块并手动增加进度跟踪器,而使用文件则不能(.NET将为您管理整个上载)。 就个人而言,我觉得有些东西是可疑的,因为在UploadDataAsync的情况下没有理由使用无效信息调用UploadProgressChanged事件 – 要么使用有效的,正确的信息调用它,要么根本不调用它。
无论如何,给UploadFileAsync一个镜头,看看它是怎么回事。