【问题标题】:How do I stop a stopwatch at a certain amount of time?如何在特定时间停止秒表?
【发布时间】:2026-01-05 18:30:01
【问题描述】:

我正在制作一个每分钟单词的程序(用于课堂),根据我一直在研究的内容,这应该有效。基本上,如果计时器达到 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);

    }

【问题讨论】:

    标签: c# stopwatch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      好的,让我们看看你的代码做了什么:

      1. Console.WriteLine(WordBank.LevelOneWords);。好的,你在控制台上打印一些单词。该语句正常结束并执行下一条语句。
      2. stopWatch.Start( );。好的,你启动秒表。时间开始滴答作响。执行前进到下一条语句。
      3. if ( stopWatch.Elapsed.Seconds >= timeInSeconds )。好的,这会在您启动秒表之后立即执行...几纳秒后,也许吧?如果timeInSeconds 大于0,则stopWatch.Elapsed.Seconds >= timeInSeconds 将为假。
      4. 执行继续...

      您预计第 2 步和第 3 步之间的秒数是如何以及何时过去的?

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

      【讨论】:

        最近更新 更多