我有一个控制台应用程序,我想创建一个倒数计时器。这就是我的尝试:
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();
}
}
此代码适用于某些情况。但是,问题是它会清除整个控制台窗口,并且当计时器上方有一些字符时无法使用。
答案 0 :(得分:8)
我知道有两种方法可以做你想做的事情
1)使用Console.SetCursorPosition();
。当您确定定时器上方的字符数量时,这是适用的。
2)使用Console.CursorLeft
。这适用于所有情况。
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 :(得分:7)
如果您将"\r"
打印到控制台,则光标会返回到当前行的开头,因此可以正常工作:
for (int a = 10; a >= 0; a--)
{
Console.Write("\rGenerating Preview in {0:00}", a);
System.Threading.Thread.Sleep(1000);
}
答案 2 :(得分:2)
您可以使用的一个简单技巧是在字符串中放置\r
以将光标返回到当前行的开头:
static void Main(string[] args)
{
Console.WriteLine("This text stays here");
for (int a = 10; a >= 0; a--)
{
Console.Write("\rGenerating Preview in {0}", a);
System.Threading.Thread.Sleep(1000);
}
}
答案 3 :(得分:1)
Console.SetCursorPosition 相关的是您可能正在寻找的东西。获取当前位置,并在每次Write
/ WriteLine
来电时重新设置它。
类似的东西:
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.....");