小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理
2021-05-29 12:02
标签:cal 信息 定义 pre port catch indicator method tps 关于上传下载文件(图片等),涉及到UI进度条的显示,c#中 System.IProgress提供了相应的api. 对于多个文件的使用,这个使用还是很不错的选择,如下为相关使用代码: 参考:https://devblogs.microsoft.com/dotnet/async-in-4-5-enabling-progress-and-cancellation-in-async-apis/ 小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理 标签:cal 信息 定义 pre port catch indicator method tps 原文地址:https://www.cnblogs.com/LPudding/p/11096237.htmlnamespace System
{
//
// 摘要:
// 定义进度更新的提供程序。
//
// 类型参数:
// T:
// 进度更新值的类型。此类型参数是逆变。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的详细信息,请参阅 泛型中的协变和逆变。
public interface IProgressin T>
{
//
// 摘要:
// 报告进度更新。
//
// 参数:
// value:
// 进度更新之后的值。
void Report(T value);
}
}
1 async Taskint> UploadPicturesAsync(Listobject> imageList, IProgressint> progress, CancellationToken ct)
2 {
3 try
4 {
5 int totalCount = imageList.Count;
6 int processCount = await Task.Runint>(() =>
7 {
8 int tempCount = 0;
9 foreach (var image in imageList)
10 {
11 //await the processing and uploading logic here
12 //int processed = await UploadAndProcessAsync(image);
13 // 异步上传/下载方法
14 bool success = Task.Run(async () =>
15 {
16 await Task.Delay(2000);
17 return image.ToString() == "取消" ? false : true;
18 }).Result;
19 if (ct.IsCancellationRequested) //判断是否取消
20 {
21 ct.ThrowIfCancellationRequested();
22 }
23 if (progress != null)
24 {
25 progress.Report((tempCount * 100 / totalCount));
26 }
27 tempCount++;
28 }
29
30 return tempCount;
31 });
32 return processCount;
33 }
34 catch (OperationCanceledException ex)
35 {
36 throw ex;
37 }
38 }
39 // 向应该被取消的 System.Threading.CancellationToken 发送信号
40 // cts.Token 传播有关应取消操作的通知。
41 CancellationTokenSource cts = new CancellationTokenSource();
42 ///
文章标题:小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理
文章链接:http://soscw.com/index.php/essay/89095.html