Как я могу обновить строку в C # Windows Console App, не нарушая пользовательский ввод? - PullRequest
1 голос
/ 12 октября 2010

При создании приложения консоли Windows в C # можно ли обновлять строки в консоли, когда пользователь вводит текст?

Мой текущий код:

    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;
    }

1 Ответ

1 голос
/ 12 октября 2010

Я бы порекомендовал изменить это с консольного приложения на приложение Windows и поместить отчет в стандартный графический интерфейс пользователя.

Это позволит вам отделить области пользовательского ввода от экрана отчетов и обеспечить более удобный и удобный интерфейс в целом.


При этом вы могли бы явно позиционировать курсор и избежать "прерывания" пользователя (дольше, чем вызов метода refresh). Однако это потребует больших усилий.

Ключи должны были бы читать ключ ввода с консоли по ключу (вместо использования ReadLine), так как вам нужно было бы иметь возможность «перепечатывать» предыдущий ввод пользователя.

Когда пришло время обновить дисплей, вы можете получить текущую позицию курсора и контент для текущей строки, очистить консоль, написать новый текст, написать любой текст, который уже отображался (текущий ввод пользователя) и используйте Console.SetCursorPosition , чтобы явно установить местоположение курсора.

Если вы собираетесь это сделать, возможно, было бы неплохо заранее установить позицию курсора на последнюю строку консоли (фактически создавая графический интерфейс для режима консоли). Это позволило бы вам по крайней мере создать эффект консольного приложения старой школы и сделать это менее удивительным для пользователя.

...