Как я могу сделать таймер для выхода из моей программы

Мне нужно сделать таймер, который будет выходить из моей программы через 3 секунды - когда Bool установлен в true - как я могу это сделать? Я попытался использовать несколько базовых таймеров в новом классе, но, похоже, это не работает. Я использовал таймер здесь http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx но он не работает.

private static System.Timers.Timer aTimer;

public static void Main()
{
    // Create a timer with a ten second interval.
    aTimer = new System.Timers.Timer(10000);

    // Hook up the Elapsed event for the timer.
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    // Set the Interval to 2 seconds (2000 milliseconds).
    aTimer.Interval = 2000;
    aTimer.Enabled = true;

}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Game1.timedOrNo = true
}

}

2 ответа

Решение

Предполагая, что вы используете XNA (из списка тегов), вы должны иметь следующий метод в вашем Game учебный класс:

/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
}

Поэтому вам нужно проверить, прошло ли 3 секунды, и затем выйти:

/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
    if (gameTime.TotalGameTime.TotalSeconds >= 3)
        this.Exit;
}

Предполагая, что у вас действительно есть aTimer.Start(); где-то в вашем коде, с чем вы разместили таймер действительно вызовет OnTimedEvent через две секунды и установите bool в true, Все, что вам нужно сделать сейчас, это проверить состояние bool где-то, предпочтительно в Update метод Game1 с Exit метод как это:

protected override void Update(GameTime gameTime)
{
    if (timedOrNo)
    {
        Exit();
    }
}

В качестве альтернативы, поскольку вы можете выйти только один раз, логическое значение на самом деле не нужно, и вы можете закрыть приложение непосредственно при срабатывании таймера:

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Game1.Exit();
}

Как примечание, вы должны инициировать Interval непосредственно в конструкторе с помощью new System.Timers.Timer(2000); вместо установки 10 секунд, а затем сразу 2 вручную. Кроме того, вы должны изменить 2000 в 3000 если вы хотите, чтобы он вышел через три секунды, как вы изначально просили.

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