本文摘自PHP中文网,作者迷茫,侵删。
年前经常聊天的大佬群里有人写了窗体的倒计时来计算下班时间和放假时间:)简直就是在嘲讽我这种没有工作的人,哈哈哈
窗体的倒计时相当的没有技术含量,主要是不够炫酷,不能够体现我们程序员的身份。
那什么才叫炫酷?必须是控制台啊!
电视剧上黑客噼里啪啦噼里啪啦滚屏的画面多炫酷!
所以,研究了一下怎么样在控制台上计时。
百度到了msdn的老帖子,所有的回答都是使用线程。那就用线程吧。
主要的计时方法就是使用 Thread.Sleep(1000); 方法,使主线程停止一秒。
然后循环使用线程调用传参方法 Thread thread = new Thread(delegate() { GetTime(dt); });
这个方法计算时间差然后输出时间。
这样就会完成一个bug(比心,用心创造BUG),虽然计算一下时间,再输出,基本上是用不了多少时间的,
但是几百次几千次以后就会导致两次输出时间里少了一秒,但对于最后的结果来说并无大碍。
(后知后觉,不用线程调用方法应该也可以,主要还是Thread.Sleep(1000);)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Timer
{
class Program
{
static bool isEnd = false ;
static void Main( string [] args)
{
Console.Title = "Timer" ;
Console.WindowWidth = 50;
Console.BufferHeight = 25;
Console.WriteLine( "现在的时间是" );
Console.WriteLine(DateTime.Now);
Console.WriteLine( "输入截至时间" );
DateTime dt = Convert.ToDateTime(Console.ReadLine());
DateTime dtNow = Convert.ToDateTime(DateTime.Now);
while (isEnd == false )
{
Thread thread = new Thread( delegate () { GetTime(dt); });
thread.Start();
Thread.Sleep(1000);
}
Console.ReadLine();
}
static void GetTime(DateTime dt)
{
DateTime dtNow = Convert.ToDateTime(DateTime.Now);
TimeSpan ts = dt - dtNow;
Console.ForegroundColor = ConsoleColor.Green;
Console.SetCursorPosition(8, 5);
Console.WriteLine(ts);
if (ts.TotalSeconds <= 1)
{
Console.SetCursorPosition(0, 9);
Console.WriteLine( "计时已完成" );
isEnd = true ;
}
}
}
}
|
Console.ForegroundColor = ConsoleColor.Green; 改变输出字符的颜色为绿色。
阅读剩余部分
相关阅读 >>
C#实现在listview中插入图片的示例代码分享
详细介绍C#实现关闭子窗口而不释放子窗口对象的方法分享
C#学习记录:编写高质量代码改善整理建议1-3
c#中var和dynamic之间的区别是什么?
C# 实现 cachehelper
C#动态对象dynamic实现方法和属性动态代码详解
详细介绍用C#描述数据结构0:导图
asp.net实现分页(非控件,输出html代码)
关于C#中方法的阐述
采用 C# 编写的学委助手详解及实例
更多相关阅读请进入《C#》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » 详解C# 控制台倒计时