在DNX控制台应用中实现简易的加载动画

在开发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();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485