DNX 控制台应用程序旋转指示器示例





5.00/5 (2投票s)
控制台应用程序的简单基于任务的旋转指示器
引言
如果你需要在控制台应用程序中使用一个旋转指示器
,你可以通过 Google 或其他搜索引擎轻松找到基于线程的示例。但是,我找不到适用于 DNX 控制台应用程序的有效的旋转指示器
示例。本文展示了如何在 DNX 控制台应用程序中实现一个简单的旋转指示器
。
背景
如果你使用 DNX 核心依赖项,你将无法使用一些传统的线程技术和控制台功能。为了创建旋转指示器
,我将使用任务并行库 (TPL),并且为了规避缺失的控制台功能,我使用\r
字符代替Console.CursorLeft
。
Using the Code
你可以在你的 DNX 控制台应用程序中使用这个类来实现一行开头的旋转指示器
。我使用 "\r
" 两次,因为我希望控制台输出中的旋转指示器
字符在停止后被覆盖。
public class ConsoleSpinner
{
private CancellationTokenSource TokenSource { get; set; }
private Task Task { get; set; }
public ConsoleSpinner()
{
this.TokenSource = new CancellationTokenSource();
}
public void Start()
{
var token = this.TokenSource.Token;
if (this.Task == null)
{
this.Task = Task.Run(() =>
{
while (!token.IsCancellationRequested)
{
var spinChars = new char[] { '|', '/', '-', '\\' };
foreach (var spinChar in spinChars)
{
Console.Write(string.Concat("\r", spinChar, "\r"));
System.Threading.Tasks.Task.Delay(25).Wait();
}
}
}, token);
}
}
public void Stop()
{
this.TokenSource.Cancel();
this.Task.Wait();
this.Task = null;
}
}
按如下方式使用旋转指示器
var spinner = new ConsoleSpinner();
spinner.Start();
// do something
spinner.Stop();
关注点
使用新的 DNX 核心框架很有趣,但目前,我发现自己很难找到替代方案,用于正常 .NET 框架中包含的技术/命名空间。我想随着更多 DNX 核心的 nuget 包的可用,情况会得到改善。
历史
- 2016年3月13日:初始版本