2012-06-09 2 views
0

Может ли кто-нибудь помочь мне остановить мой таймер в форме окна C3? Я добавил таймер в форме с использованием конструктора, а интервал - 1000; Я хотел бы сделать некоторые действия после 5 секунд ожидания после нажатия кнопки. Пожалуйста, проверьте код и сообщите мне. Проблема теперь в том, что я получаю MessageBox2 бесконечно и никогда не останавливаю таймер.Таймер непрерывной стрельбы в C#, Не в состоянии остановить

static int count; 

public Form1() 
     { 
      InitializeComponent(); 
      timer1.Tick += timer1_Tick; 
     } 
public void button1_Click(object sender, EventArgs e) 
     { 

     timer1.Enabled = true; 

     while(count>5) 
     { 
      ....dosome actions... 
     } 

     } 
private void timer1_Tick(object sender, EventArgs e) 
     { 
      count1++; 
      MessageBox.Show("Messagebox2"); 
      if (count1 == 5) 
      { 
       //timer1.Enabled = false; timer1.Stop(); 
       ((System.Timers.Timer)sender).Enabled = false; 
       MessageBox.Show("stopping timer"); 
      } 
     } 
+0

где count1? К кому принадлежит count1? он также является статичным? вы задали его где-то 0? –

+0

С этим кодом много чего не так. Но начните с потери окна сообщения, вместо этого используйте Debug.Print. –

+0

Преобразуйте 'sender' в System.Windows.Forms.Timer в первую очередь. –

ответ

2

Я бы оказать count бесполезно и просто использовать timer 1 interval собственность и поставить свои действия в timer1_Tick случае.

public void button1_Click(object sender, EventArgs e) 
    { 
      timer1.Interval = 5000; 
      timer1.Enabled = true; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     timer1.Enabled = false; 
     MessageBox.Show("stopping timer"); 
     // Your other actions here 
    } 
0

Вы приращение count1 и проверка count.

while(count1 > 5) 
{ 
    ...dosome actions... 
} 
+0

_ "Я добавил таймер в форме с использованием конструктора, а интервал задан как 1000" _ – CodeCaster

+0

@CodeCaster: Теперь? –

0

Какой таймер вы используете? Поскольку C# поддерживает класс Timer из двух разных пространств имен. Один из форм, другой - из System.Timers. Я бы предложил вам использовать другой - System.Timers.Timer.

   Timer t = new Timer(20000); // created with 20seconds 
      t.Enabled = true; // enables firing Elapsed event 
      t.Elapsed += (s, e) => { 
       \\do stuff 
      }; 

      t.Start(); 

В этом кратком коде вы можете увидеть, как таймер создан и разрешен. Регистрируясь на событие «Истекшее», вы явно говорите, что делать после истечения времени. и это делается только один раз. Конечно, есть некоторые изменения, необходимые в случае нажатия кнопки пользователя пользователя, прежде чем ваш лимит будет достигнут. Но это сильно зависит от поведения требуемого вами действия.

+0

Я взял таймер из панели инструментов, чтобы поместить в форму – Kavitha

+0

И это как раз то, что принадлежит пространству имен System.Windows.Forms. Один из System.Timers, сделает то же самое, и я думаю, что это лучше для использования. – lukas

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