C#Winforms应用程序 - 上传流进度条

时间:2017-08-21 15:45:15

标签: c# winforms wcf progress-bar webservice-client

我希望在文件上传到WebService时添加进度条。

我刚刚开始研究winforms应用程序,我认为它使用 WCF 来允许客户端将文档上传到我们的公司存储库。

我使用UploadService,在其中传递由元数据和文件组成的多部分流。我已经负责建立这个部分。

我不太确定如何勾选"某些东西"到流,所以我可以跟踪它上传

我看到有些人使用后台工作程序异步跟踪任务的进度,但似乎无法找到某人执行此操作来跟踪上传到WebService的文件的示例。我似乎只找到一个跟踪正在内存中构建的流的示例。

感谢任何建议/帮助。

谢谢!

  • (我是实习生,所以如果我误解了事情,我道歉。如果有必要,我很乐意提供更清晰的细节)

编辑:据我所知,上传流的方法只需要一个流,没有选项可以传递流的大小,或者一次读取多少字节。

1 个答案:

答案 0 :(得分:0)

假设您知道文件的大小(如果它是您最有可能的本地文件)。

您可能会将其作为流从磁盘上访问,然后将其复制到上传流中。

如果您以块(例如缓冲区)进行操作,那么您可以计算进度:

var totalNumberOfChunks = (fileSize / chunkSize);
for(var chunk = 0; chunk < totalNumberOfChunks; chunk++)
{
  // assuming you have the chunk byte array
  // and have already sent it up to the server

  var progress = ((double)chunk / totalNumberOfChunks) * 100;
  // do something to surface this progress
}

基本上你只是想弄清楚你发送了多少单独的数据块,然后当你发送它们时,计算你走了多远并以某种方式表现出进展。

当然,有时可以为您完成此操作:Getting the upload progress during file upload using Webclient.Uploadfile