跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

自定义等待 Spinner - Spectre 控制台系列

Tim Corey
6分12秒

Spectre Console 是一个 .NET 库,可让您创建具有丰富输出、颜色和格式的精美控制台应用程序。 Tim Corey 在他的"构建自定义等待 Spinner - Spectre Console 系列"视频的开头提醒我们,Spectre Console 可以将普通的 C# 控制台应用程序变成更具视觉吸引力、信息量更大的工具。 在本课中,Tim 演示了如何实现自定义加载旋转器--这个小巧但功能强大的功能可以让您的控制台程序的状态和进度指示器更容易跟踪。

Tim 在 0:16 时解释说,项目的源代码链接在视频下方。 他鼓励观众自己进行测试和实验,更改设置或添加功能,以了解它在自己的环境中是如何工作的。 如果您想支持不同的终端,如 Windows 终端或 PowerShell,它们对 Unicode 字符的处理方式略有不同,那么这一点尤其有用。

使用内置旋转器

蒂姆从一个简单明了的例子开始。 在 0:37 处,他使用 AnsiConsole.Status 编写代码,以显示已知的旋转器样式,同时一些工作在后台运行。 他选择了 Spinner.Known.Aesthetic,但指出 Spectre 在 Spinner.Known 列表中提供了很多选项。Tim 在旋转器旁边添加了一个字符串 "Loading"(正在加载),以便用户知道正在发生什么。

在状态块中,Tim 插入了一个 Thread.Sleep(10000) - 10 秒 - 仅用于测试。 这就迫使控制台在足够长的时间内显示旋转器的动作。 他在 1:23 处解释说,一旦任务完成,旋转器就会自动消失。 这是 Spectre 鼓励在控制台应用程序中显示状态或进度的默认模式。

向自定义旋转器迈进

1:41 时,Tim 说:"好的,让我们创建一个自定义的旋转器",展示了如何超越内置选项。 他解释说,有时您希望以一种与自己的项目、品牌色彩甚至处理的数据类型相匹配的方式来格式化或风格化您的旋转器。 通过编写自己的 spinner 类,您可以控制框架、时间以及是否使用 Unicode 字符。

创建 Spinner 类

Tim 创建了一个名为 TestSpinner.cs 的新文件。 2:05 时,他将该类设为公共类,并将其设置为继承自 Spectre 的抽象 Spinner 类。 他使用 Visual Studio 的 "实现抽象类 "功能生成所需的成员。 这时,您需要提供自己的值,如速度、帧数和 Unicode 设置,而不是使用默认值。

Tim 在 2:18 强调指出,这些都是只获取的属性,这使得编写表达式成员变得更加简单。 这种格式可使您的旋转器定义保持紧凑,便于日后维护或更新。

控制每帧速度

2:30 时,Tim 将定时属性设置为 TimeSpan.FromMilliseconds(200)。 这意味着旋转器将以大约每秒五帧的速度移动。 他解释说,如果您希望旋转器运行得更快或更慢,可以选择不同的值。 根据您的命令或进程正在进行的操作,调整此设置是改善加载动画感觉的一种简便方法。

处理 Unicode 字符

3:00 时,Tim 谈到了一个关键问题:Unicode. 他指出,在 Visual Studio 内置控制台中运行项目时,Unicode 字符可能无法正确呈现,从而导致错误或符号丢失。 不过,如果在 Windows 终端或 PowerShell 中运行同一个项目,Unicode 和表情符号一般都能正常显示。在他的演示中,他将该属性设置为 false 以避免这个问题,但他指出,当你的终端支持该属性时,你也可以将其设置为 true。

这使得在应用程序中添加彩色符号、箭头甚至基于表情符号的进度指示器变得更加容易。您可以用 ✅、🌧、🔄 或任何您想要的字符来格式化框架,以提供更丰富的信息。

定义框架

下一个属性是框架列表。在 3:34 处,Tim 写了一个返回字符串数组的箭头函数。 每个字符串是旋转器的一个 "帧"。 在他的例子中,他使用了一个大 "O "和几个小 "O "来模拟跨线运动。

他将基帧复制并粘贴了五次,然后在 4:12 处将一个 "O "替换到每一帧的不同位置。 这就产生了一个简单的动画:大 "O "似乎从左向右移动,然后循环回到起点。 Tim 在 4:26 指出,您可以添加更多帧来反转方向、添加颜色格式(Spectre 支持丰富的标记,如 [green]text[/]),或者尝试使用 Unicode 字符(如果您的控制台支持)。

下面是 Tim 的 TestSpinner 类代码:

using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}
using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}

实施和测试自定义旋转器

类定义完成后,Tim 切换回主程序。 在 4:42 处,他将 Spinner.Known.Aesthetic 替换为 new TestSpinner()。 仅此而已,无需修改其他代码。 然后,他在 4:52 处运行应用程序,展示新旋转器的运行情况。

Spectre Console Custom Waiting Spinner 1 related to 实施和测试自定义旋转器

这一测试步骤非常重要。 Tim 建议您在用户将使用的终端上运行您的项目,这样您就可以及早发现编码、颜色或时间方面的问题。 不同的外壳和字体会影响旋转器的显示效果。

Spectre Console Custom Waiting Spinner 2 related to 实施和测试自定义旋转器

添加 Unicode、表情符号和颜色

Tim 在 5:00 时解释说,如果您启用了 Unicode,没有什么能阻止您使用表情符号或特殊字符作为框架。 您可以使用 Spectre 的标记创建天气旋转器、绿色进度条或任何适合您应用的创意显示。 这对于需要长时间才能启动或继续运行的命令尤其有用,因为用户喜欢清晰的视觉反馈。

他还指出,Spectre Console 可以更简单地为您的旋转器添加颜色和格式化文本。 例如,您可以在旋转器旁边写上[green]Loading...[/]来强调成功,或者在需要时用红色文字突出错误。

性能提示和设置

在 5:19 处,Tim 总结了定制旋转器所需的关键要素:

  • 时间:每帧显示多长时间。

  • IsUnicode:是使用 Unicode/emoji 还是纯文本。

  • 帧:您制作动画的字符串数组。

他提醒说,帧数太多或速度太慢意味着用户可能永远看不到最后一帧,除非您的流程很长。 在这里选择正确的选项可以使您的旋转器更加有效。随着时间的推移,这些设置还能让您更轻松地扩展项目--您可以添加更多帧或调整定时,而无需重写整个控制台应用程序。

总结

在 5:38 处,Tim 演示了通过继承 Spinner 类并提供自己的值,可以快速为控制台或基于 PowerShell 的工具创建自定义加载指示器。 这样您就能更好地控制提供给用户的信息和感觉。 在 5:47 处,他提醒观众源代码和文档都在视频描述中,您可以自己探索和扩展。

结论

根据 Tim Corey 的视频,我们已经了解了如何实现自定义 Spectre Console 加载旋转器:继承自 Spinner、提供定时值、指定 Unicode 支持并定义框架。 然后,只需用您的新类替换已知的旋转器,即可将其添加到您的项目中。 Tim 还指出了添加 Unicode 字符、表情符号和彩色标记的方法,使控制台应用程序的状态和进度显示更加丰富和美观。

通过使用 Spectre Console 的功能,您可以提供更清晰的反馈,更早地发现和解决问题,并创建用户喜爱的精美控制台应用程序。

Hero Worlddot related to 自定义等待 Spinner - Spectre 控制台系列
Hero Affiliate related to 自定义等待 Spinner - Spectre 控制台系列

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我