C# 在屏幕上显示计时器,同时请求用户输入?

C# 在屏幕上显示计时器,同时请求用户输入?,c#,C#,我正在开发一个c#控制台应用程序 我必须在屏幕上指定的光标位置显示计时器,同时用户应输入一些内容 我该怎么做 Console.SetCursorPosition(x, y); //timer code here Console.SetCursorPosition(x, y); // cursor goes to some other location because timer is displayed at top-right of the screen. 我的问题是这个方法不同步。 我必须

我正在开发一个c#控制台应用程序

我必须在屏幕上指定的光标位置显示计时器,同时用户应输入一些内容

我该怎么做

Console.SetCursorPosition(x, y);
//timer code here
Console.SetCursorPosition(x, y); // cursor goes to some other location because timer is displayed at top-right of the screen.
我的问题是这个方法不同步。 我必须等到光标到达那个位置,然后显示时间并返回,以便我可以键入

您可以在阅读一行时使用“偶数”。有关工作示例,请参见下面的代码:

class Program
{
    private static System.Timers.Timer _timer;

    static void Main( string[] args )
    {

        _timer = new System.Timers.Timer( 1000 );
        _timer.Elapsed += Timer_Elapsed;
        _timer.AutoReset = true;
        _timer.Start();

        Console.CursorLeft = 0;
        Console.CursorTop = 5;
        // Type something here...
        var l_readline = Console.ReadLine();
        // Print it out... (to show it correctly reads the input)
        Console.WriteLine( l_readline );
        Console.ReadKey( true );
    }

    private static void Timer_Elapsed( object sender, System.Timers.ElapsedEventArgs e )
    {
        int l_left = Console.CursorLeft;
        int l_top = Console.CursorTop;

        Console.CursorLeft = 0;
        Console.CursorTop = 0;
        Console.Write( DateTime.Now.ToLongTimeString() );
        Console.CursorLeft = l_left;
        Console.CursorTop = l_top;
    }

}

只要您在完成后将光标位置重置回其原始位置,我认为大多数形式的输入都不会有太大问题。

处理此类问题的最简单方法是存储当前光标(X,Y),将时间写入时间(X,Y),然后将光标设置回光标(X,Y)

private const int TIME_LEFT = 40;
private const int TIME_RIGHT = 2;

private void WriteTime() {
  var left = Console.CursorLeft;
  var right = Console.CursorTop;
  try {
    Console.SetCursorPosition(TIME_LEFT, TIME_RIGHT);
    Console.Write(DateTime.Now);
  } finally {
    Console.SetCursorPosition(left, right);
  }
}
不知道你还在做什么,这是我给你的最好建议


这应该比人类的反应速度更快。

您说您正在开发一个控制台应用程序,但您已将其标记为。解释?
我的问题是这个方法不同步
这是什么意思?你能再发一些代码吗?例如,用户输入的位置。同时公布x和y的实际值也会有所帮助。我会尽力解释。我在控制台应用程序中添加了一个计时器。这里有一张照片,它看起来怎么样。我正在使用Console.SetCursorPosition显示计时器(每秒更新一次)。然后,我切换回用户输入答案的区域。你现在明白了吗?我明白你的意思。看看这个:。从这个链接来看,这似乎不是一个简单的任务。这是一个来自Who博士的建议!谢谢你,好心的先生。希望我能代表你,但不能。