2010-10-11 3 views
2

Lors de la création d'une application console Windows en C#, est-il possible de mettre à jour des lignes dans la console en attendant une ligne de lecture?Comment puis-je mettre à jour la ligne en cours dans une application console C# Windows en attendant ReadLine?

Mon code actuel est:

do 
{ 
    Console.Clear(); 
    Console.WriteLine("RA:  " + scope.RightAscension); 
    Console.WriteLine("Dec: " + scope.Declination); 
    Console.WriteLine("Status: " + scope.Slewing); 
    System.Threading.Thread.Sleep(1000); 
} while (true); 

Répondre

1

Oui. Vous pouvez écrire sur la console à partir d'un thread séparé tout en bloquant sur Console.ReadLine.

Cela étant dit, cela va causer de la confusion. Dans votre cas, vous effacerez ce que l'utilisateur saisit à mi-chemin de sa ligne (via Console.Clear()), plus déplacez la position du curseur de façon spectaculaire.


Edit: Voici un exemple qui montre ceci:

namespace ConsoleApplication1 
{ 
    using System; 
    using System.Threading; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Starting"); 

      ThreadPool.QueueUserWorkItem(
       cb => 
        { 
         int i = 1; 
         while (true) 
         { 
          Console.WriteLine("Background {0}", i++); 
          Thread.Sleep(1000); 
         } 
        }); 
      Console.WriteLine("Blocking"); 
      Console.WriteLine("Press Enter to exit..."); 
      Console.ReadLine(); 
     } 
    } 
} 

Si vous exécutez, vous verrez la console attend sur ReadLine, mais le fil de fond encore des impressions.

+0

Pouvez-vous donner un exemple de code? Je suis plutôt nouveau à C#. Je me demandais si les discussions étaient la réponse. –

+0

@Arlen: Fait. C'est là. –

+0

Quelles sont vos instructions using? –

1

Utilisez Console.KeyAvailable dans la boucle. Dès qu'il retourne vrai, l'utilisateur a commencé à taper alors appelez ReadLine(). Cependant, cela ne constitue pas une interface utilisateur très attrayante. Considérez Windows Forms.

0

cette solution vous aide mai:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace WaitForExit 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      new Thread(() => 
       { 
        Console.ReadLine(); 
        Environment.Exit(0); 
       }).Start(); 

      int i = 0; 
      while (true) 
      { 
       Console.Clear(); 
       Console.WriteLine(++i); 
       Thread.Sleep(1000); 
      } 
     } 
    } 
}  
Questions connexes