Я делаю основное консольное приложение (к сожалению, это необходимо), которое показывает время и очень простой интерфейс, где пользователь может ввести опцию.Когда они это сделают, пользовательский интерфейс обновляется с соответствующими новыми данными для отображения и позволяет дальнейший ввод и так далее.Все это время в верхней части отображаются живые часы с секундами.
В основном я перерисовываю весь пользовательский интерфейс каждую секунду и пытаюсь прослушать вводимые пользователем данные, чтобы определить, как пользовательский интерфейс отображается в следующий раз.вокруг.Как мне управлять пользовательским вводом при перерисовке интерфейса?Есть ли лучший способ?
Вот целая (очень урезанная версия) программы:
using System;
using System.Diagnostics;
using System.Timers;
namespace TimerTest
{
class Program
{
static bool useStartUI = false;
static string currentInput = "";
static Timer aTimer = new System.Timers.Timer();
static void Main(string[] args)
{
aTimer.Elapsed += new ElapsedEventHandler(DrawUI);
aTimer.Interval = 1000;
aTimer.Enabled = true;
Console.ReadLine();
currentInput = Console.ReadLine();
}
static void DrawUI(object source, ElapsedEventArgs e)
{
Debug.WriteLine("currentInput = " + currentInput);
if (currentInput == "A")
{
useStartUI = true;
} else
{
useStartUI = false;
}
if (!useStartUI)
{
DisplayStartUI();
}
else
{
DisplayCurrentUI();
}
}
private static void DisplayStartUI()
{
Console.Clear();
Console.WriteLine("DisplayStartUI - " + DateTime.Now.ToString("HH:mm:ss tt"));
Console.WriteLine("Press 'B' to switch to CurrentUI");
Console.ReadLine();
currentInput = Console.ReadLine();
}
private static void DisplayCurrentUI()
{
Console.Clear();
Console.WriteLine("DisplayCurrentUI - " + DateTime.Now.ToString("HH:mm:ss tt"));
Console.WriteLine("Press 'A' to switch to StartUI");
Console.ReadLine();
currentInput = Console.ReadLine();
}
}
}
На данный момент у меня есть Console.ReadLine();
сразу после срабатывания таймера,если нет, то приложение открывается и закрывается сразу.Два других Console.ReadLine();
полностью игнорируются, но именно в этих точках я ожидал, что пользовательский ввод будет записан.