2017-08-19 1 views
1

J'essaye de créer une application de console qui me donne une horloge de mise à jour dans le coin avec la capacité de donner une entrée.Mise à jour d'une horloge tout en étant capable d'entrer C# console

J'ai essayé d'utiliser plusieurs threads, mais cela me donne des erreurs bizarres.

Ma fonction d'horloge:

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 
      } 
     } 
    } 
} 

Ma principale fonction:

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

} 

Est-ce que quelqu'un sait comment je peux y arriver, est-il possible possible que je peux écrire une horloge avec un autre curseur ou quelque chose dans le sens de cela?

Répondre

0

Essayez de changer votre code comme celui-ci

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

L'idée principale est de stocker la position du curseur d'origine avant de dessiner l'horloge puis renurn en arrière.

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

Console.SetCursorPosition(originalX, originalY);