WebClient AsyncUpload进度百分比始终返回50%

时间:2010-01-26 15:01:37

标签: c# .net webclient progress uploaddataasync

我正在使用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,000e.ProgressPercentage= 50

有人能指出这个问题吗?

1 个答案:

答案 0 :(得分:7)

如果您想监控上传的进度,则需要使用UploadFileAsync而不是UploadData。

使用UploadDataAsync,您应该手动将文件分块并显示进度(至少,这是我根据自己的经验确定的,虽然我没有在MSDN上看到它这样写过)。

您正在寻找的是使用UploadFileAsync,它将正确调用UploadProgressChanged事件。然后,您可以查看应该正确反映的事件args属性BytesSent和TotalBytesToSend。

我认为这背后的基本原理是,当您发送数据时,您可以循环数据流的块并手动增加进度跟踪器,而使用文件则不能(.NET将管理整个< / em>为您上传)。就个人而言,我觉得有些东西是可疑的,因为在UploadDataAsync的情况下没有理由使用无效信息调用UploadProgressChanged事件 - 要么使用有效的,正确的信息调用它,要么根本不调用它

无论如何,请为UploadFileAsync提供一个镜头,看看它是如何发生的。