ETJava Beta | Java    注册   登录
  • 搜索:
  • 使用Spectre.Console定制.NET控制台输出样式演示

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/weskynet/p/18467930
    如有侵权 请联系我们删除  (页面底部联系我们)  
     
    创建一个控制台项目,引用包Spectre.Console。或者如果需要定制控制台cli命令,也可以引用 Spectre.Console.Cli ,里面自带包含了Spectre.Console
     
    0
     
    先做个最简单的输出演示,例如下划线、背景色、加粗等,如下图演示所示。
    0
     
    MarkupLine对应WriteLine的效果,去掉Line,就代表没了换行。需要实现的输出样式里面,字符串在两个[]之间,样式结束以[/]结尾。
    AnsiConsole.MarkupLine("[underline green]绿色下划线[/]");
    AnsiConsole.MarkupLine("[blue on white]这是蓝底白字[/]");
    AnsiConsole.MarkupLine("这是正常文本");
    AnsiConsole.MarkupLine("[bold]这是粗体文本[/]");

     

    也可以输出表格样式,例如如下图所示效果
    0
     
      // 创建一个表格
      var table = new Table();
    
      // 设置表格的标题
      table.Title("[bold green]员工信息表[/]");
    
      // 添加列(可以设置对齐方式等属性)
      table.AddColumn(new TableColumn("[u]姓名[/]").Centered());
      table.AddColumn(new TableColumn("[u]部门[/]").Centered());
      table.AddColumn(new TableColumn("[u]职位[/]").Centered());
      table.AddColumn(new TableColumn("[u]邮箱[/]").Centered());
    
      // 添加行
      table.AddRow("张三", "技术部", "软件工程师", "zhangsan@example.com");
      table.AddRow("李四", "市场部", "市场分析师", "lisi@example.com");
      table.AddRow("王五", "人力资源部", "招聘专员", "wangwu@example.com");
    
      // 设置表格的样式
      table.Border(TableBorder.Rounded);
      table.BorderColor(Color.Red);
      table.Alignment = Justify.Center;
    
      // 显示表格
      AnsiConsole.Write(table);

     

    也可以设计进度条动态效果:
     

     

     
                AnsiConsole.Progress()
                .Start(progress =>
                {
                    // 创建一个进度条任务
                    var task = progress.AddTask("[green]下载中...[/]");
    
                    while (!task.IsFinished)
                    {
                        // 更新进度条的进度
                        task.Increment(0.5);
                        Thread.Sleep(50);
                    }
                });

     

     
    也可以设计类似pip下载时候的动态耗时效果:

     

     
      // 使用 Status 方法来实现动态显示
      AnsiConsole.Status()
          .Start("计时器...", ctx =>
          {
              while (true)
              {
                  // 计算已经过去的时间
                  TimeSpan elapsed = DateTime.Now - startTime;
    
                  // 更新状态文本
                  ctx.Status($"耗时: [bold yellow]{elapsed.TotalSeconds:n1}[/] 秒");
    
                  // 刷新频率,每200毫秒更新一次
                  System.Threading.Thread.Sleep(200);
              }
          });

     

    如果以上内容对你有帮助,欢迎转发、点赞、评论等。谢谢! 也欢迎关注个人公众号:【Dotnet Dancer】

     

    参考文献:
    [1]:Spectre.Console官方开源项目地址:https://github.com/spectreconsole/spectre.console
    [2]:文档地址:https://spectreconsole.net/quick-start