前言
你是否厌倦了控制台应用程序默认的简陋界面?
这时,你可以试试引用Nuget包Spectre.Console
。
打印使用帮助
首先,我们可以设置控制台应用程序可以执行的命令:
static async Task<int> Main(string[] args)
{var app = new CommandApp();app.Configure(config =>{config.AddCommand<DemoCommand>("demo");config.AddCommand<AnotherCommand>("another");});return await app.RunAsync(args);
}
然后,为每个命令指定参数:
public class DemoCommandSettings : CommandSettings
{[CommandOption("-u|--username")][Description("需要显示的名称")]public string Name { get; set; }
}
最后,实现命令:
public class DemoCommand : AsyncCommand<DemoCommandSettings>
{public override Task<int> ExecuteAsync(CommandContext context, DemoCommandSettings settings){Console.WriteLine($@"Hello {settings.Name}!");return Task.FromResult(0);}
}
可以看到,Spectre.Console自动生成了帮助信息,指导用户如何使用。
与用户交互
我们还可以运行命令时询问用户,进行一定的交互输入:
var name =settings.Name?? AnsiConsole.Ask<string>("What's your [green]name[/]?");
Console.WriteLine($@"Hello {name}!");
显示信息
当我们从用户那里收集完信息后,可以让用户检查信息,以确保所有信息输入正确。例如,我们可以以表格格式呈现摘要:
do
{name = AnsiConsole.Ask<string>("What's your [green]name[/]?");var table = new Table();table.AddColumn("参数");table.AddColumn(new TableColumn("值").Centered());table.AddRow("-u", $@"[green]{name}[/]");AnsiConsole.Write(table);
} while (!AnsiConsole.Confirm("输入是否正确?"));
报告进度
在执行命令时,可以显示进度来告诉用户工作完成的百分比:
await AnsiConsole.Progress().StartAsync(async ctx =>{ var task1 = ctx.AddTask("执行中......");while (!ctx.IsFinished){// 模拟工作耗时await Task.Delay(100);task1.Increment(1);}});
结论
正如我在开始时提到的,使用Spectre.Console可以创建出漂亮的控制台应用程序,更多功能请参看官方文档:https://spectreconsole.net/
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“