在开发DNX核心依赖的应用时,可能会遇到一些传统线程技术和控制台功能的局限性。本文将展示如何在DNX控制台应用中实现一个简单的加载动画。将使用任务并行库(Task Parallel Library,简称TPL)来实现这一功能,并使用\r字符来代替Console.CursorLeft,以绕过控制台功能的缺失。
如果在使用DNX核心框架,可能会发现一些传统的.NET框架中包含的技术或命名空间无法使用。随着DNX核心的NuGet包逐渐增多,相信这种情况会有所改善。
可以在DNX控制台应用中使用以下类来实现加载动画。在开始时,在控制台输出的行首添加加载动画。使用\r字符两次,因为希望在停止加载动画后,控制台上的动画字符能够被覆盖。
以下是C#代码示例:
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();
// 执行某些操作
spinner.Stop();