2017-08-19 20 views
1

我正在尝试创建一个控制台应用程序,该控制台应用程序在给出输入的能力的角落给了我一个更新时钟。更新时钟,同时能够输入C#控制台

我试过使用多个线程,但它给了我怪异的错误。

我的时钟功能:

public class Work 
{ 
    public void Count() 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      DateTime date = DateTime.Now; 
      Console.SetCursorPosition(0, 1); 
      Console.Write(new string(' ', Console.WindowWidth)); 


      Console.SetCursorPosition((Console.WindowWidth - 8)/2, 0); 
      Console.Write(String.Format("{0:HH:mm:ss}", date)); 
      Console.WriteLine(); 
      if (i == 90) 
      { 
       i = 0; 
      } 
      else 
      { 
       // Continue 
      } 
     } 
    } 
} 

我的主要功能:

class Program 
{ 
    public static void Main(string[] args) 
    { 
     Console.CursorVisible = false; 
     Work w = new Work(); 
     Console.WriteLine("Main Thread Start"); 

     ThreadStart s = w.Count; 
     Thread thread1 = new Thread(s); 
     thread1.Start(); 
     int i = 2; 
     Console.SetCursorPosition(0, i); 
     i = i + 1; 
     Console.WriteLine("Input:"); 
     string input = Console.ReadLine(); 
     Console.WriteLine(input); 
    } 

} 

有谁知道我能做到这一点,是没有办法,我可以写一个时钟以不同的任何可能的方式光标或者其他的东西?

回答

0

试着改变你的代码,这样

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.CursorVisible = false; 
     var w = new Work(); 
     Console.WriteLine("Main Thread Start"); 

     ThreadStart s = w.Count; 
     var thread1 = new Thread(s); 
     thread1.Start(); 
     int i = 2; 
     Console.SetCursorPosition(0, i); 
     var format = "Input:"; 
     Console.WriteLine(format); 
     Console.SetCursorPosition(format.Length + 1, i); 
     string input = Console.ReadLine(); 
     Console.WriteLine(input); 
    } 
} 

public class Work 
{ 
    public void Count() 
    { 
     while (true) 
     { 
      Thread.Sleep(1000); 
      var originalX = Console.CursorLeft; 
      var originalY = Console.CursorTop; 

      Console.SetCursorPosition(0, 1); 
      Console.Write(new string(' ', Console.WindowWidth)); 

      Console.SetCursorPosition((Console.WindowWidth - 8)/2, 0); 
      Console.Write("{0:HH:mm:ss}", DateTime.Now); 

      Console.SetCursorPosition(originalX, originalY); 
     } 
    } 
} 

主要的想法是存储原来的光标位置绘制你的时钟之前,然后renurn回来。

var originalX = Console.CursorLeft; 
var originalY = Console.CursorTop; 

Console.SetCursorPosition(originalX, originalY);