在C#中构建Windows控制台应用时,是否可以在用户输入文本的同时更新控制台中的行?
我当前的代码是:
public static void Scope()
{
bool stop = false;
ASCOM.Utilities.Chooser chooser = new ASCOM.Utilities.Chooser {DeviceType = "Telescope"};
ASCOM.Interface.ITelescope scope = new ASCOM.DriverAccess.Telescope(chooser.Choose());
scope.Connected = true;
ThreadPool.QueueUserWorkItem(
cb =>
{
do
{
Console.WriteLine("RA: " + scope.RightAscension);
Console.WriteLine("Dec: " + scope.Declination);
Console.WriteLine("Status: " + scope.Slewing);
Console.SetCursorPosition(0, Console.CursorTop - 3);
Thread.Sleep(1000);
} while (!stop);
}
);
Console.Read();
stop = true;
}发布于 2010-10-12 04:36:00
我建议将其从控制台应用程序更改为Windows应用程序,并将报告放入标准GUI中。
这将使您的屏幕上的用户输入区域与您的报告分离,并提供一个更好、更易用的整体界面。
也就是说,您可以显式地定位游标,并避免“中断”用户(持续时间长于刷新方法调用)。不过,这需要付出很大的努力。
键将是一个键一个键地读取控制台输入键(而不是使用ReadLine),因为您需要能够“重新键入”用户以前的输入。
当需要刷新显示时,您可以获取当前行的当前光标位置和内容,清除控制台,编写新文本,写入已经显示的任何文本(用户的当前输入),并使用Console.SetCursorPosition显式设置光标位置。
如果你要这样做,最好在前面将光标位置设置到控制台的最后一行(实际上是一个控制台模式的gui)。这将允许您至少给出老式控制台应用程序的效果,并使这对用户来说不那么令人惊讶。
https://stackoverflow.com/questions/3909715
复制相似问题