C#在控制台打印进度条同步和异步
使用控制台打印进度条的简单方法。
有现成的IProgress接口进行操作:
实例:
var prog = new Progress<double>((theV => {
Console.WriteLine($@"Now the Progress:"
COUNT / 10.0 * 100 "%" new string('#', COUNT));
COUNT ;
Console.SetCursorPosition(0, 0);
}));
for(int i = 0; i < 10; i )
{
Thread.Sleep(200);
((IProgress<double>)prog).Report(i / 10.0);
}
效果:
原理:
IProgress接口需要实现void Report(T value);方法
这里的T就是进度的值
可以不同的数据类型,最常见的比如int,则多表示为1~100,double多表示为0.01-1.00
C#提供一个IProgress的基本实现类
Progress它可有一个有参的构造方法
public Progress(Action handler);
这个方法的参数是一个无返回值的action(可以理解为一个void method),但必须要一个T泛型的参数。
每当调用Report时,就会自动的执行handler方法
而这个handler的T类型参数就是Report的Value
注意点:
执行的线程是不同的,但是顺序是同步的,则应该可以设置为异步执行
异步则可以如下改造:
Task<string> task = new Task<string>(()=> {
string tag = $@"|/-\"; int tag_index = 0;
int COUNT = 0;
var prog = new Progress<double>((theV => {
Console.Out.WriteLineAsync($@" args:{theV}|{tag[tag_index % tag.Length]}|ThreadID:{Thread.CurrentThread.ManagedThreadId}Now Progress is"
COUNT / 10.0 * 100 "%" new string('#', COUNT));
COUNT ;
Console.SetCursorPosition(0, 0);
}));
for (int i = 0; i < 10; i )
{
Thread.Sleep(200);
((IProgress<double>)prog).Report(i / 10.0);
}
return "success";
});
task.Start();
Console.WriteLine("在这之前的会执行-----");
await task;
Console.WriteLine("异步完成后才执行");
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiaacjb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22