C# WebClient异步上载进度百分比始终返回50%
我使用Webclient通过异步调用将数据上传到服务器C# WebClient异步上载进度百分比始终返回50%,c#,.net,webclient,progress,uploaddataasync,C#,.net,Webclient,Progress,Uploaddataasync,我使用Webclient通过异步调用将数据上传到服务器 WebClient webClient = new WebClient(); webClient.UploadDataAsync(uri , "PUT", buffer, userToken); 我已将DatauploadProgress和DatauploadCompleted事件附加到相应的回调函数 // Upload Date Progress webClient.UploadProgre
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(例如:如果文件大小为63000,我会得到e.BytesSent=63000
和e.ProgressPercentage=50
有人能告诉我这个问题吗?如果你想监控上传的进度,你需要使用UploadFileAsync而不是UploadData 使用UploadDataAsync,您应该手动分块文件并显示进度(至少,这是我根据自己的经验确定的,尽管我还没有在MSDN上看到它是这样写的) 您需要的是改用UploadFileAsync,它将正确调用UploadProgressChanged事件。然后,您可以通过Tessent和TotalByTestsEnd查看事件args属性,这两个属性应该正确反映出来 我认为这背后的基本原理是,当您发送数据时,您可以在数据流的块上循环,并手动增加进度跟踪器,而对于一个文件,您不能这样做(.NET将为您管理整个上载).就我个人而言,我觉得有些可疑,因为在UploadDataAsync的情况下,没有理由使用无效信息调用UploadProgressChanged事件-要么使用有效、正确的信息调用它,要么根本不调用它
无论如何,给UploadFileAsync一个机会,看看结果如何。+1为了花时间提供这个详细的答案,我将测试它并返回:)Thx,tested,它解决了这个问题:但是我觉得它有点愚蠢和不合逻辑。UploadDataAsync实际上支持PUT方法吗?我在这个页面上有一个表单,我可以作为文件上传的url提交对表单操作的调用吗?