首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不中断用户输入的情况下更新C# Windows控制台应用程序中的行?

如何在不中断用户输入的情况下更新C# Windows控制台应用程序中的行?
EN

Stack Overflow用户
提问于 2010-10-12 04:30:53
回答 1查看 1.5K关注 0票数 1

在C#中构建Windows控制台应用时,是否可以在用户输入文本的同时更新控制台中的行?

我当前的代码是:

代码语言:javascript
复制
    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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-12 04:36:00

我建议将其从控制台应用程序更改为Windows应用程序,并将报告放入标准GUI中。

这将使您的屏幕上的用户输入区域与您的报告分离,并提供一个更好、更易用的整体界面。

也就是说,您可以显式地定位游标,并避免“中断”用户(持续时间长于刷新方法调用)。不过,这需要付出很大的努力。

键将是一个键一个键地读取控制台输入键(而不是使用ReadLine),因为您需要能够“重新键入”用户以前的输入。

当需要刷新显示时,您可以获取当前行的当前光标位置和内容,清除控制台,编写新文本,写入已经显示的任何文本(用户的当前输入),并使用Console.SetCursorPosition显式设置光标位置。

如果你要这样做,最好在前面将光标位置设置到控制台的最后一行(实际上是一个控制台模式的gui)。这将允许您至少给出老式控制台应用程序的效果,并使这对用户来说不那么令人惊讶。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3909715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档