How can I update the current line in a C# Windows Console App while waiting for ReadLine?
在C_中构建Windows控制台应用程序时,是否可以在等待读取行时更新控制台中的行?
我当前的代码是:
1 2 3 4 5 6 7 8 | 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); |
对。在console.readline上阻塞时,可以从单独的线程写入控制台。
尽管如此,这会引起混乱。在您的例子中,您将清除用户在其行中键入的内容(通过console.clear()),然后显著地移动光标位置。
编辑:下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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(); } } } |
如果您运行这个,您将看到控制台在readline上等待,但是后台线程仍然会打印出来。
使用循环内的console.keyAvailable。一旦返回true,用户就开始键入,所以调用readline()。不过,这并不是一个非常有吸引力的用户界面。考虑Windows窗体。
此解决方案是否可以帮助您:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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); } } } } |
号