【问题标题】:Getting the upload progress during file upload using Webclient.Uploadfile使用 Webclient.Uploadfile 在文件上传期间获取上传进度
【发布时间】:2010-11-02 05:02:13
【问题描述】:

我有一个使用 webclient 将文件上传到服务器的应用程序。 我想在文件上传过程中显示一个进度条。 我将如何实现这一目标?

【问题讨论】:

    标签: c# .net vb.net webclient


    【解决方案1】:

    WebClient.UploadFileAsync 将允许您执行此操作。

    WebClient webClient = new WebClient();
    webClient.UploadFileAsync(address, fileName);
    webClient.UploadProgressChanged += WebClientUploadProgressChanged;
    

    ...

    void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
    {
            Console.WriteLine("Upload {0}% complete. ", e.ProgressPercentage);
    }
    

    请注意,线程不会再阻止上传,所以我建议使用:

     webClient.UploadFileCompleted += WebClientUploadCompleted;
    

    ...

     void WebClientUploadCompleted(object sender, UploadFileCompletedEventArgs e)
     {
         // The upload is finished, clean up
     }
    

    【讨论】:

    • 谢谢。我正在使用多线程,文件上传已经在另一个线程上运行。那么我应该只使用 Uploadfile 方法还是 UploadfileAsync 方法?
    • 恐怕您仍然需要 UploadFileAsync,线程将阻塞对 UploadFile 的调用,因此这些事件将永远不会被调用。您可以通过在开始上传时设置 bool 标志来重新创建自己的阻塞,在 uploadcomplete 中重置它,然后 thread.sleep 直到标志被清除。
    • 注意:UploadProgressChanged 事件不适用于UploadDataAsync 方法
    • WebClient中如何传递FileName等参数?
    • 您的方法中是否使用了任何 cancelAsyc。如果是的话,你是如何使用它的方式取消上传当场停止而不是等待结束上传过程来取消?
    【解决方案2】:

    将您的事件处理程序添加到 WebClient.UploadProgressChanged 并调用 WebClient.UploadFileAsync。

    有关示例,请参阅 WebClient.UploadProgressChanged 文档。

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2017-09-09
      相关资源
      最近更新 更多