[英]Uploading files one by one using Webclient.UploadFileAsync
我正在将多个文件发送到我的包装器,该包装器将文件发送到ftp。我必须获取上载进度,所以我必须使用asycn方法进行上载。问题是,如何才能一一调用上载器,但是还获得进度报告?
Here's a solution if you want to wait for each file: 如果您要等待每个文件,这是一个解决方案:
class FileUploader
{
private readonly Uri _destination;
public FileUploader(Uri destination)
{
_destination = destination;
}
public void UploadFiles(IEnumerable<string> fileNames)
{
foreach (var fileName in fileNames)
{
UploadFile(fileName);
}
}
private void UploadFile(string fileName)
{
var tcs = new TaskCompletionSource<bool>();
using (var client = new WebClient())
{
client.UploadProgressChanged += UploadProgressChangedHandler;
client.UploadFileCompleted += (sender, args) => UploadCompletedHandler(fileName, tcs, args);
client.UploadFileAsync(_destination, fileName);
tcs.Task.Wait();
}
}
private void UploadCompletedHandler(string fileName, TaskCompletionSource<bool> tcs, UploadFileCompletedEventArgs e)
{
if (e.Cancelled)
{
tcs.TrySetCanceled();
}
else if (e.Error != null)
{
tcs.TrySetException(e.Error);
}
else
{
tcs.TrySetResult(true);
}
}
private void UploadProgressChangedHandler(object sender, UploadProgressChangedEventArgs e)
{
// Handle progress, e.g.
System.Diagnostics.Debug.WriteLine(e.ProgressPercentage);
}
}
You have to subscribe to the UploadProgressChanged
event: 您必须订阅
UploadProgressChanged
事件:
var client = new WebClient();
client.UploadProgressChanged += (s, e) => System.Diagnostics.Debug.WriteLine(e.ProgressPercentage);
client.UploadFileAsync(new Uri("ftp://server/directory"), @"C:\temp\file.txt");
client.UploadFileCompleted += (s, e) => Task.Factory.StartNew(client.Dispose);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.