2

首先,这是一项家庭作业。我应该超越我们所学的,所以我想到了一个 WPM 控制台应用程序。我在Timers上进行了很多搜索,但这对于第一学期来说太过分了。所以我找到了一个更简单的方法。问题是,我希望能够调用一些字符串并让用户输入它们,最后运行计算以确定他们每分钟的话。我读到使用 Task.Factory.StartNew 应该让我运行两种方法。

class Program
{
    static void Main( string[] args )
    {
        Timer go = new Timer( );
        WordBank display = new WordBank( );

        Task.Factory.StartNew(go.timer1_Tick);
        Task.Factory.StartNew(display.LevelOneWords);
        Console.ReadKey( );

    }
}//end main

class Timer
{
public Timer()
{}
    public void timer1_Tick(  )
    {
        int seconds= 0;
        DateTime dt = new DateTime( );

        do
        {
            Console.Write("One minute timer: " + dt.AddSeconds(seconds).ToString("ss"));
            Console.Write("\r");
            seconds++;
            Thread.Sleep(1000);                
        } while ( seconds< 60 );
    }
}//end Timer

class WordBank
{
public WordBank()
{ }

public void LevelOneWords()
{
        string easyWords = "the boy had so much fun at the park.";
        Console.WriteLine("\n\n", easyWords);
        Console.ReadKey( );
}

当我运行程序时,计时器开始一秒钟,然后立即被字符串替换。我是否错误地使用了 Task.Factory.StartNew?

4

1 回答 1

1

不要在他们打字时运行计时器(同时需要两个程序),而是尝试获取他们最初开始打字的时间,他们结束打字的时间,然后做一些除法。IE:

static void Main()
{
    // Displays WordBank
    WordBank display = new WordBank();

    var startTime = DateTime.Now;

    // Let them type for X amount of time
    var totalWords = TakeUserInputForXSeconds(45);

    var endTime = DateTime.Now;

    var wpm = totalWords / (endTime.Subtract(startTime).TotalMinutes);
}

对于 TakeUserInputForXSeconds 方法,我会查看这篇文章中的信息:Stop running the code after 15 seconds

于 2017-12-07T23:59:55.337 回答