如何在一定时间内停止秒表?

时间:2017-12-09 21:19:20

标签: c# stopwatch

我正在制作每分钟一个单词的课程(课堂上),而且从我一直在研究的课程中,这个应该工作。基本上,如果计时器达到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);

    }

2 个答案:

答案 0 :(得分:2)

在这种情况下你不能使用Console.ReadLine(),因为在用户点击Enter之前,它不会将控制权返回给你的程序。尝试在循环中使用Console.ReadKey(),检查超时是否已过期。

答案 1 :(得分:1)

好的,让我们看一下你的代码所做的事情:

  1. Console.WriteLine(WordBank.LevelOneWords);。好的,你在控制台上打印一些单词。该语句正常结束,执行进入下一个语句。
  2. stopWatch.Start( );。好的,你启动秒表。时间开始滴答作响。执行进入下一个陈述。
  3. if ( stopWatch.Elapsed.Seconds >= timeInSeconds )。好的,这是在你启动秒表后立即执行 ...几秒后,也许?如果timeInSeconds高于0,则stopWatch.Elapsed.Seconds >= timeInSeconds将为false。
  4. 执行继续......
  5. 你是如何以及何时在第2步和第3步之间进行秒数的?

    那么,你如何解决这个问题呢?简单的方法是让用户输入单词,无论他有多慢:userType = Console.ReadLine( );只有检查已用时间,如果大于timeInSeconds,则通知用户他太慢了。