控制台应用程序中的倒计时器

时间:2013-08-01 21:26:50

标签: c# timer console-application

我有一个控制台应用程序,我想创建一个倒数计时器。这就是我的尝试:

    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();
        }
    }

此代码适用于某些情况。但是,问题是它会清除整个控制台窗口,并且当计时器上方有一些字符时无法使用。

4 个答案:

答案 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.....");