如何为测验应用程序创建控制台计时器



我想创建一个 30 秒的计时器,30 秒后计时器应该结束并显示一些消息。

在这 30 秒内,我希望用户输入一个选项,如果他无法输入选项,那么我需要显示一些消息,例如超时。

public void AskEasyQues(EasyQuestion easyQuestion)
{
System.Console.WriteLine("Here is Your:"+sQcount+" Question:");
System.Console.WriteLine("***********************************");
System.Console.WriteLine("Question is of The Category:"+easyQuestion.MCat);
System.Console.WriteLine("***********************************");
System.Console.WriteLine(easyQuestion.MDescription);
System.Console.WriteLine("--------------------------------------");
System.Console.WriteLine("1:"+easyQuestion.MOption1+"         "+"2:"+easyQuestion.MOption2);
System.Console.WriteLine();
System.Console.WriteLine("3:"+easyQuestion.MOption3+"         "+"4:"+easyQuestion.MOption4);
System.Console.WriteLine();
System.Console.WriteLine("Enter your Choice:");
for (int a = 60; a >= 0; a--)
{
Console.Write("rGenerating Preview in {0:00}", a);
System.Threading.Thread.Sleep(1000);
} 

string ans = Console.ReadLine();
if(ans == easyQuestion.MAnswer)
{
mNoOfQuesAnswerd++;
System.Console.WriteLine();
System.Console.WriteLine("------Well Played Champion!!!!!!-----");
sPlayerScore=sPlayerScore+100;
}
else
{
System.Console.WriteLine();
System.Console.WriteLine("------Wrong Choice Lets Move On--------");
}
System.Console.WriteLine();
System.Console.WriteLine("Press any Key To Continue For Next Question");
Console.ReadLine();
System.Console.WriteLine();
System.Console.WriteLine("----------------------------");
sQcount = sQcount + 1;
Console.Clear();
}

这是我的代码,我也尝试了使用 for 循环的倒数计时器,如下所示:

for (int a = 60; a >= 0; a--)
{
Console.Write("rGenerating Preview in {0:00}", a);    
System.Threading.Thread.Sleep(1000);
}

但这不是我想要实施请分享一分钟来帮助我。

我认为你想使用的是一个计时器。

首先添加以下命名空间。

using System.Timers;

接下来添加一个模块化/全局变量来执行计时。

static Timer questionTimer = new Timer(30000) //Time in milliseconds to fire event..

接下来,您需要连接到已用事件并启用计时器。

questionTimer.Elapsed += QuestionTimer_Elapsed;
questionTimer.Enabled = true;

你的计时方法可能看起来像这样。

private static void QuestionTimer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Time up!");
questionTimer.Stop();
}

最后,每次显示新问题时,您都会启动此计时器。(如果问题回答正确,请不要忘记停止计时器,否则事件仍将触发(

questionTimer.Start(); //Start question timer...
Console.Write("What is 5+5? "); //Ask the question...
string ans = Console.ReadLine(); //Get the user input...
if (ans == "10")
{
//If it's correct stop timing...
Console.WriteLine("Correct!");
questionTimer.Stop();
}

我希望这对您有所帮助,如果您需要任何进一步的解释,请发表评论。 :)

好吧,我想我在之前的回答中误解了你的问题。

你想要的是一条倒计时剩余时间的线?

连接计时器的类似过程,但也创建一个名为 secondCounter的 int 变量,我们将计时器的间隔设置为 1000。(1 秒(。

我们的计时器已用方法现在如下所示:

private static void QuestionTimer_Elapsed(object sender, ElapsedEventArgs e)
{
secondCounter = secondCounter + 1;
Console.SetCursorPosition(0, 2); //This is a row number...
Console.Write("rSeconds Remaining: {0}: ", 30 - secondCounter);
if (secondCounter >= 30)
{
Console.WriteLine("Time's up!");
questionTimer.Stop();
}
}

然后,您将在计时器之外处理问题逻辑。

questionTimer.Start();
Console.WriteLine("What is 5 + 5?");
var input = Console.ReadLine();
Console.WriteLine($"You anwsered {input}");
questionTimer.Stop();