【问题标题】:Why UploadProgressChanged in WebClient.UploadFileAsync work not correctly?为什么 WebClient.UploadFileAsync 中的 UploadProgressChanged 无法正常工作?
【发布时间】:2015-08-05 14:38:54
【问题描述】:

我正在上传文件并获得这样的上传进度:

using (var wc = new WebClient())
{
        wc.UploadProgressChanged += FileUploadProgressChanged;
        wc.Headers.Add(HttpRequestHeader.ContentType, "image/png");
        wc.UploadFileAsync(new Uri(url), filePath);
}

...

private void FileUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
        ProgressBarUpload.Value = e.ProgressPercentage;
}

但是50%后e.ProgressPercentage返回-441850然后马上返回100。为什么会这样?

【问题讨论】:

  • ProgressBarUpload.Value是什么类型?
  • 我不确定在这里使用using 语句是否是个好主意,因为wc 将在离开范围时被释放,并且事件处理程序将挂在已释放的对象上。尝试相同的代码,但没有 using 块。
  • @YuvalItzchakov ,ProgressBarUpload.Value 是 Double,e.ProgressPercentage 是 Int。但我不认为 this.e.ProgressPercentage 中的问题返回不正确的值
  • @Christian ,它不起作用。并且 FileUploadProgressChanged 工作正常。我写的是50%后返回错误值,然后马上到100%。

标签: c# wpf file-upload upload


【解决方案1】:

我的解决方案:

private void FileUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
        ProgressBarUpload.Value = e.BytesSent * 100 / e.TotalBytesToSend;
}

我也发现了两个类似的问题,但我没有设法解决这个问题。但它可能对其他人有用:

WebClient UploadFileAsync strange behaviour in progress reporting(问题原因-授权问题)

Uploading HTTP progress tracking(问题原因-第三方应用)


注意。 下载文件后我们收到服务器的响应,最好显示下载文件为 95%,剩余的 5% 留给显示服务器的响应。并且最终在成功下载并从服务器响应后,我们将是 100%。

PS:在代码中,我没有展示,只是说给可能需要的人。

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多