• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C#在控制台打印进度条同步和异步

武飞扬头像
罗马苏丹默罕默德
帮助1

使用控制台打印进度条的简单方法。
有现成的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
系列文章
更多 icon
同类精品
更多 icon
继续加载