2013-10-14 48 views
0

當我的定時器達到秒數(10,20或30)時,我想要顯示一個消息框。這有效,但不是隻有1個消息框,9出現!我不知道爲什麼?程序打開9個消息框,而我只想要1

private void timer1_Tick(object sender, EventArgs e) 
    { 
     int hrs = sw.Elapsed.Hours, mins = sw.Elapsed.Minutes, secs = sw.Elapsed.Seconds; 
     label5.Text = ""; 

     if (mins < 60) 
      label5.Text += "0" + mins + ":"; 
     else 
      label5.Text += mins + ":"; 

     if(secs < 60) 
      label5.Text += secs; 

     else if(secs < 60) 
      label5.Text += secs; 

     if (comboBox1.Text == "10 seconden") // maximale tijd per beurt instellen. 
      if (mins == 00 && secs == 10) 
       MessageBox.Show("Je tijd is op!"); 

     if (comboBox1.Text == "20 seconden") 
      if (mins == 00 && secs == 20) 
       MessageBox.Show("Je tijd is op"); 

     if (comboBox1.Text == "30 seconden") 
      if (mins == 00 && secs == 30) 
       MessageBox.Show("Je tijd is op"); 
+0

我懷疑你有多個事件訂閱,請在創建/訂閱你的計時器的地方張貼一段代碼。附註:這裏有一些重複的代碼,考慮更簡單的邏輯。 –

+0

問題已經解決:),我只需要將計時器間隔從100更改爲1000. –

+1

爲什麼更改間隔會改變行爲? –

回答

5

很難100%確定發生了什麼事情。我認爲最有可能的是,當您撥打MessageBox.Show時,計時器仍在運行。並且MessageBox.Show運行一個模態消息循環,導致定時器事件觸發。然後他們再次執行並顯示消息框。然後再次。然後再次。

如果您有一個定時器事件處理程序來抽取消息隊列,就像您這樣做,您至少需要在泵送消息隊列時禁用定時器,以避免重新入侵。

+0

問題解決了! :) –

相關問題