我正在制作每分钟一个单词的课程(课堂上),而且从我一直在研究的课程中,这个应该工作。基本上,如果计时器达到10秒,我希望秒表停止(虽然这不是必需的)并阻止用户再输入。我怎么做到这一点?
public void Timer30()
{
double userCharcount = 0;
string userType;
int timeInSeconds = 10;
//new instance of stopwatch
Stopwatch stopWatch = new Stopwatch( );
//call level 1 words from wordbank
Console.WriteLine(WordBank.LevelOneWords);
stopWatch.Start( );
//**this doesn't seem to work**
if ( stopWatch.Elapsed.Seconds >= timeInSeconds )
{ Console.WriteLine("Time's up! Nice work.");
stopWatch.Stop( );
Console.ReadKey();
}
userType = Console.ReadLine( );
stopWatch.Stop( );
//capture number of characters user types to calculate WPM
userCharcount = userType.Length;
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}" ,
ts.Hours , ts.Minutes , ts.Seconds ,
ts.Milliseconds / 10);
Console.WriteLine("\nNice job! You finished in " + elapsedTime + "!");
Thread.Sleep(2000);
//CalculateWPMEasy(userCharCount);
}
答案 0 :(得分:2)
在这种情况下你不能使用Console.ReadLine()
,因为在用户点击Enter之前,它不会将控制权返回给你的程序。尝试在循环中使用Console.ReadKey()
,检查超时是否已过期。
答案 1 :(得分:1)
好的,让我们看一下你的代码所做的事情:
Console.WriteLine(WordBank.LevelOneWords);
。好的,你在控制台上打印一些单词。该语句正常结束,执行进入下一个语句。stopWatch.Start( );
。好的,你启动秒表。时间开始滴答作响。执行进入下一个陈述。if ( stopWatch.Elapsed.Seconds >= timeInSeconds )
。好的,这是在你启动秒表后立即执行 ...几秒后,也许?如果timeInSeconds
高于0,则stopWatch.Elapsed.Seconds >= timeInSeconds
将为false。你是如何以及何时在第2步和第3步之间进行秒数的?
那么,你如何解决这个问题呢?简单的方法是让用户输入单词,无论他有多慢:userType = Console.ReadLine( );
。 只有检查已用时间,如果大于timeInSeconds
,则通知用户他太慢了。