Как запустить метод во время работы таймера на экране?

Во-первых, это домашнее задание. Я должен выйти за рамки того, что мы узнали, поэтому я подумал о консольном приложении WPM. Я много искал Таймеры, но это слишком много для первого семестра. Поэтому я нашел более простой способ. Дело в том, что я хочу иметь возможность вызывать некоторые строки, чтобы пользователь вводил их, и в конце выполнял вычисление, чтобы определить их слова в минуту. Я прочитал, что использование 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 неправильно?

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 я бы посмотрел информацию в этом посте: прекратить выполнение кода через 15 секунд

Другие вопросы по тегам