开发者

How can I update a line in a C# Windows Console App while without disrupting user input?

开发者 https://www.devze.com 2023-01-19 08:43 出处:网络
When building a Windows Console App in C#, is it possible to update lines in the console while the user is entering text?

When building a Windows Console App in C#, is it possible to update lines in the console while the user is entering text?

My current code is:

    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);
           开发者_Go百科         Thread.Sleep(1000);
                } while (!stop);
            }
        );
        Console.Read();
        stop = true;
    }


I would recommend changing this from a Console application to a Windows application, and putting the reporting into a standard GUI.

This will let you have user input areas of your screen separate from your reporting, and provide a much nicer, more usable interface overall.


That being said, you could potentially position the cursor explicitly, and avoid "interrupting" the user (for longer than your refresh method call). This would require a lot of effort, though.

The keys would be to read the console input key by key (instead of using ReadLine), as you'd need to be able to "retype" the user's previous input.

When it's time to refresh the display, you could get the current cursor position and content for the current line, clear the console, write your new text, write in any text that would have been displaying already (the user's current input), and use Console.SetCursorPosition to explicitly set the cursor location.

If you're going to do that, it might be nice to, up front, set the cursor position to the last line of the console (in effect making a console-mode gui). This would allow you to at least give the effect of an old-school console application, and make this less surprising to the user.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号