Countdown timer in console Application
本问题已经有最佳答案,请猛点这里访问。
我有一个控制台应用程序,我想创建一个倒计时。这就是我所尝试的:
1 2 3 4 5 6 7 8 9 | static void Main(string[] args) { for (int a = 10; a >= 0; a--) { Console.Write("Generating Preview in {0}", a); System.Threading.Thread.Sleep(1000); Console.Clear(); } } |
此代码在某些情况下有效。但是,问题是它清除了整个控制台窗口,并且在计时器上方有一些字符时不能使用。
我知道有两种方法可以做你想做的事
1)使用
2)使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | static void Main(string[] args) { for (int a = 10; a >= 0; a--) { Console.SetCursorPosition(0,2); Console.Write("Generating Preview in {0}", a); // Override complete previous contents System.Threading.Thread.Sleep(1000); } } static void Main(string[] args) { Console.Write("Generating Preview in"); for (int a = 10; a >= 0; a--) { Console.CursorLeft = 22; Console.Write("{0}", a ); // Add space to make sure to override previous contents System.Threading.Thread.Sleep(1000); } } |
。
如果您将
"
1 2 3 4 5 6 | for (int a = 10; a >= 0; a--) { Console.Write(" Generating Preview in {0:00}", a); System.Threading.Thread.Sleep(1000); } |
号
您可以使用的一个简单技巧是在字符串中放置一个
1 2 3 4 5 6 7 8 9 10 | static void Main(string[] args) { Console.WriteLine("This text stays here"); for (int a = 10; a >= 0; a--) { Console.Write(" Generating Preview in {0}", a); System.Threading.Thread.Sleep(1000); } } |
console.setCursorPosition和Related是您可能需要的。获取当前位置,并在每次
比如:
1 2 3 4 5 6 7 8 9 | var origRow = Console.CursorTop; for (int a = 10; a >= 0; a--) { Console.SetCursorPosition(0, origRow); Console.Write("Generating Preview in {0}", a); System.Threading.Thread.Sleep(1000); } Console.SetCursorPosition(0, origRow); Console.Write("Generating Preview done....."); |