今天遇到个需求,在C#控制台做倒计时,需要打印出倒计时剩余时间,且倒计时部分只显示在一行要怎么做呢?

C#在console中可以设置控制台的光标位置,用方法Console.SetCursorPosition().

所以只显示在一行的倒计时,就在输出前记录当前Console控制台的光标位置.上代码:

        /// <summary>
        /// 控制台休眠,并打印出剩余时间
        /// </summary>
        /// <param name="seconds">休眠的时间</param>
        private void ThreadSleep(int seconds)
        {
            //子线程输出出剩余时间
            Task.Factory.StartNew(() =>
            {
                var timeLeft = seconds;
                var top = Console.CursorTop;
                var left = Console.CursorLeft;
            COUNT:
                if (timeLeft > 0)
                {
                    Console.SetCursorPosition(left, top);
                    Console.WriteLine($"{DateTime.Now.ToString("MM-dd HH:mm:ss")} => 线程休眠{--timeLeft}/{seconds}秒后继续...");
                    System.Threading.Thread.Sleep(1000);
                    goto COUNT;
                }
            });
            //主线程进入休眠
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));
        }

效果如下:

赞(0) 踩(0)

与本文相关的软件

发表我的评论

最新评论

  1. 暂无评论