2015-03-04 2 views
0

я использую этот код: -Основная ошибка таймера в VB

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    If button.Location.Y >= 618 Then 
    MessageBox.Show("You lost!", "Failure", MessageBoxButtons.RetryCancel) 
    Timer1.Enabled = False 
    End If 
    End Sub 

Давайте предположим, что условие всегда истинно, то вместо того, чтобы отключить Timer1, его отображения MessageBox бесконечное times.But, если я пишу Timer.enable = ложь сначала, а затем в поле сообщений, тогда таймер останавливается. Почему это происходит

+1

Когда вы показываете окно сообщения с показом, код после него не будет выполняться до тех пор, пока окно сообщения не будет закрыто. Time1.Enabled = False будет выполняться только после закрытия окна сообщения. –

+2

Имя «подсудимого»: [Application.DoEvents] (http://stackoverflow.com/questions/5181777/use-of-application-doevents) Также связано: [Что такое насос сообщений?] (Http: //stackoverflow.com/questions/2222365/what-is-a-message-pump) –

ответ

1

Потому что галочка стреляет в круглой форме Async. Выполнение нескольких галочек может происходить одновременно, если предыдущий не был завершен (и его нет в вашем случае, потому что он ждет нажатия на MessageBox). Это значит, что в то время, когда окно сообщения ожидает «Ok», запускаются другие события тика (потому что вы еще не попали в отключенную часть).

Возможно, вы захотите поставить Timer1.Enabled = false перед MessageBox, хотя это может по-прежнему потенциально запускаться в состояние гонки, хотя и менее вероятно, вы хотите проверить это.

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