在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;
}
答案 0 :(得分:1)
我建议将其从控制台应用程序更改为Windows应用程序,并将报告放入标准GUI。
这样,您就可以将屏幕的用户输入区域与报告分开,并提供更好,更实用的界面。
话虽如此,您可以明确地定位光标,并避免“中断”用户(比刷新方法调用更长)。但这需要付出很多努力。
键是按键读取控制台输入键(而不是使用ReadLine),因为您需要能够“重新键入”用户以前的输入。
当需要刷新显示时,您可以获取当前行的当前光标位置和内容,清除控制台,编写新文本,写入已经显示的任何文本(用户当前输入) ,并使用Console.SetCursorPosition显式设置光标位置。
如果您打算这样做,可能会提前将光标位置设置到控制台的最后一行(实际上是制作控制台模式gui)。这将使您至少能够提供旧式控制台应用程序的效果,并使用户不那么感到惊讶。