2013-12-16 2 views
0
private void btnProveri_Click(object sender, EventArgs e) 
{ 
    lblRezultat.Text = DateTime.Now.ToString(); 
    timer1.Interval = 1800; 
    timer1.Start(); 
    MessageBox.Show(DateTime.Now.ToString()); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    timer1.Enabled = true; 
    timer1.Interval = 1800; 
} 

Я новичок, пытающийся изучить таймеры, и это мой код выше. Я хочу сделать таймер, который длится 1,8 секунды. Затем я вызываю его внутри кнопки при щелчке и в первый раз, когда метка установлена ​​на определенную дату, а затем я устанавливаю интервал для таймера и запускаю его, но ящик сообщений выдает одно и то же время (без задержки).Временной интервал не работает, как ожидалось

ответ

3

Это потому, что вы показываете окно сообщения из того же кода, который создает таймер. Эффективно:

buttonClick: 
    Populate some text field. 
    Start timer so that it calls timerTick in 1.8 seconds 
    Display message box 

timerTick: 
    Restart timer so it calls this function in 1.8 seconds. 

Как вы можете видеть, окно сообщения отображается во время нажатия кнопки, а не при срабатывании таймера. Когда срабатывает таймер, все, что вам нужно, - это снова включить огонь в еще 1,8 секунды, но вы на самом деле ничего не делаете в этот момент.

Если вы хотите, чтобы он отображался после срабатывания таймера, это должно быть выполнено в функции таймера timer1_Tick. Но вы можете быть осторожны с этим, это возможно вы можете получить довольно большое количество диалоговых окон.

0

Похоже, что вы хотите сделать что-то вроде этого:

private void btnProveri_Click(object sender, EventArgs e) 
{ 
    lblRezultat.Text = DateTime.Now.ToString(); 
    var timer = new System.Timers.Timer(1800); 
    timer.Start(); 
    timer.Elapsed += timer1_Tick; 
} 

private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    MessageBox.Show(DateTime.Now.ToString()); 
} 

Здесь работает пример консольного:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("App started"); 
     var timer = new System.Timers.Timer(1800); 
     timer.Start(); 
     timer.Elapsed += timerHandler; 
     Console.ReadLine(); 
    } 

    private static void timerHandler(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     Messenger(DateTime.UtcNow.ToString()); 
    } 

    private static void Messenger(string time) 
    { 
     Console.WriteLine(time); 
    } 
} 
+0

Этот код ничего не делает? – user2699298

+0

Он показывает дату и время для вас каждые 1800 мс. – Valin

+0

Пробовал это, и он этого не делает. – user2699298

Смежные вопросы