2013-10-14 4 views
0

타이머가 초 (10, 20 또는 30)에 도달하면 메시지 상자가 나타납니다. 이것은 작동하지만 단지 1 개의 메시지 상자 대신 9가 나타납니다! 왜 그런지 몰라?1 회만 원할 때 9 개의 메시지 상자가 열립니다.

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

문제가 해결되었습니다. :) –

관련 문제