Управление таймером .NET

2

У меня есть приложение Windows, которое является просто формой с таймером. Мне удалось проследить это до следующей ситуации:

private void timer1_Tick(object sender, EventArgs e)
{
    MessageBox.Show("Test");
    timer1.Enabled = false;
}

Будет распечатываться Тест снова и снова, пока я не остановлю программу. Однако:

    private void timer1_Tick(object sender, EventArgs e)
    {
        //MessageBox.Show("Test");
        textBox1.Text += "t";
        timer1.Enabled = false;            
    }

Просто добавляет в текстовое поле один "t".

Может ли кто-нибудь сказать мне, почему MessageBox.Show вызывает возврат функции до того, как таймер отключен?

Теги:
timer

3 ответа

0
Лучший ответ

Вызов MessageBox.Show блокирует выполнение timer1_Tick, пока вы не закроете messsagebox, поэтому вызов для установки timer1.Enabled = false; не будет выполняться до тех пор, пока это не произойдет. Из-за этого таймер все еще работает и, таким образом, timer _Tick` продолжает получать вызов, каждый раз, когда срабатывает таймер, до тех пор, пока вы не нажмете OK в одном из сообщений.

Что вам нужно, если вы хотите, чтобы окно сообщения перестало запускать таймер, является:

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Enabled = false;
    MessageBox.Show("Test");
}
0

Вы отключили таймер после, который пользователь нажал на окно сообщения.

MessageBox.Show показывает модальный диалог. Он вернется (к методу вызывающего абонента) после того, как пользователь ответил на сообщение. Если вы сначала отключите таймер, событие не будет запущено снова, и у пользователя будет достаточно времени для реагирования.

Попробуйте следующее:

  timer1.Enabled = false;
  MessageBox.Show("Test");
0

Вы нажимаете OK при тестировании, каждый таймер нажимает? Если ящики сообщений сохраняют один поверх другого, это потому, что MessageBox.Show не возвращается, пока вы не закроете окно сообщения. Тем временем насос сообщений будет продолжать работать и обрабатывать ваши сообщения таймера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню