我希望将进度条添加到上传到Web服务的文件。
我刚刚开始开发一个 winforms 应用程序,我相信该应用程序使用WCF允许客户端将文档上传到我们的公司存储库。
我正在使用上传服务,我在其中传递由元数据和文件组成的多部分流。我已经负责构建此部分。
我不太确定如何将"某些东西"挂到流中,以便我可以跟踪它正在上传
我见过有些人使用后台工作线程异步跟踪任务的进度,但似乎找不到有人这样做来跟踪上传到 Web 服务的文件的示例。我似乎只找到一个有人跟踪内置到内存中的流的示例。
任何建议/帮助将不胜感激。
谢谢!
- (我是一名实习生,所以如果我解释错误,我道歉。如有必要,我很乐意提供更清晰的详细信息(
编辑:据我所知,上传流的方法只需要一个流,没有选项可以交给它流的大小,或者一次读取多少字节。
假设你知道文件的大小(如果它是本地的,你很可能知道(。
您可能正在磁盘外将其作为流访问,然后将其复制到上传流中。
如果您以块(例如缓冲区(的形式进行,则可以计算进度:
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
}
从本质上讲,你只是想计算出你发送了多少个单独的数据块,然后在你发送它们时计算出你走了多远,并以某种方式显示进度。
当然,有时有一些方法可以为您完成此操作: 使用 Webclient.Uploadfile 在文件上传期间获取上传进度。