C# 如何在倒计时运行时将光标设置为输入值?

C# 如何在倒计时运行时将光标设置为输入值?,c#,multithreading,console,C#,Multithreading,Console,我使用了两个线程同时运行,一个线程用于显示timeleft(从3s倒计时到0s),另一个线程用于从用户获取输入并检查输入 这里的问题是:如何设置光标停留在用户输入值的一个位置,而Timeleft仍在控制台窗口中每秒显示一次。(每次显示Timeleft光标移动到另一个位置,我无法输入值) Random rd=new Random(); 整数总分=0; 对于(int i=1;i { 对于(int t=3;t>0;t--) { 控制台。设置光标位置(0,2); Write(“timeleft:{0}”

我使用了两个线程同时运行,一个线程用于显示
timeleft
(从3s倒计时到0s),另一个线程用于从用户获取输入并检查输入

这里的问题是:如何设置
光标
停留在用户输入值的一个位置,而
Timeleft
仍在
控制台窗口中每秒显示一次。(每次显示
Timeleft
光标移动到另一个位置,我无法输入值)

Random rd=new Random();
整数总分=0;
对于(int i=1;i
{
对于(int t=3;t>0;t--)
{
控制台。设置光标位置(0,2);
Write(“timeleft:{0}”,t);
睡眠(1000);
}
});
t1.Start();
线程t2=新线程(()=>
{
while(true)
{
控制台。设置光标位置(10,1);
输入=Convert.ToInt32(Console.ReadLine());
如果(输入==总和)
{
总分+=10分;
t1.Abort();
打破
}
其他的
{
t1.Abort();
打破
}
}
});
t2.Start();
控制台。设置光标位置(0,3);
WriteLine(“总分:{0}”,总分);
while(true)
{
如果(t1.IsAlive==false)
{
t2.中止();
打破
}
}
Console.Clear();
}

设置
timeleft
后,需要将光标设置回
输入
位置:

for (int t = 3; t > 0; t--)
{
    Console.SetCursorPosition(0, 2);    //for timer
    Console.Write("timeleft : {0}", t);
    Console.SetCursorPosition(10, 1);   //resetting for total score
    Thread.Sleep(1000);
}

设置
timeleft
后,需要将光标设置回
input
位置:

for (int t = 3; t > 0; t--)
{
    Console.SetCursorPosition(0, 2);    //for timer
    Console.Write("timeleft : {0}", t);
    Console.SetCursorPosition(10, 1);   //resetting for total score
    Thread.Sleep(1000);
}

您需要将光标重置为您在
t1
中的来源。您的意思是,在“Console.Write”(“timeleft:{0}”,t);“add”Console.SetCursorPosition(10,1);“对吗?是的,这是我的建议,但如果输入超过一个字符,它将无法解决您的问题。当您使用
readline
时,用户可以输入多个字符,但一旦
t1
完成,光标将跳转到第一个字符位置。哦,我发现了这个问题。那么如何修复它呢?您需要将光标重置到
t1
中的起始位置。您的意思是,在“Console.Write”(“timeleft:{0}”,t);“add”Console.SetCursorPosition(10,1);“对吗?是的,这是我的建议,但是如果输入超过一个字符,它将无法解决您的问题。当您使用
readline
时,用户可以输入多个字符,但一旦
t1
完成,光标将跳转到第一个字符位置。哦,我发现了这个问题。那么如何修复它呢?谢谢,有没有什么方法可以使光标在每秒仍然显示timeleft的情况下不移动?没有,在
控制台中您必须更改光标的位置。您的操作完全符合要求。谢谢,是否有任何方法可以使光标在每秒仍显示timeleft的情况下不移动?否,在
控制台中,您必须更改光标的位置。你做的正是该做的。