Что вызывает это StackOverflowException? - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть программа, которая выдает исключение StackOverflowException при запуске моего кода.Я не совсем знаю, что вызывает это, но я думаю, что это как-то связано с тем, что код запускается примерно 100 раз в секунду.

У меня есть таймер (Timer1), который имеет интервал1 миллисекундаЯ хочу, чтобы код выполнялся как можно быстрее без использования цикла do ...

Вот мой код.Прежде чем кто-либо спросит, да, это было разработано, чтобы замедлить работу компьютера.

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If Not NumericUpDown2.Value >= NumericUpDown1.Value Then
        NumericUpDown2.Value += 1
        Do Until CheckBox1.Checked
            Application.DoEvents()
        Loop
        NumericUpDown2.Value -= 1
    Else
        Timer1.Enabled = False
    End If
End Sub

Работает нормально, пока NumericUpDown2.Value не достигнет 800 - 1000, затем выдает ошибку, когда NumericUpDown2.Value += 1запустить.

Максимум для NumericUpDown1 и NumericUpDown2 равен 10000.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Возможно, проблема в том, что вы вызываете DoEvents () из таймера.Doevents, вероятно, получает сообщение таймера, которое вызывает DoEvents ().И т.д. и т.д ..

1 голос
/ 07 февраля 2012

Это выглядит как проблема повторного ввода кода.Ваш код зацикливается внутри этого события, когда вы вызываете do events.Это позволяет приложению обновлять и обрабатывать события, которые включают ваш цикл и т. Д.

Таким образом, ваш код в конечном итоге выполняется как

Do
Doevents
Do
Doevents
Do
Doevents
Do
Doevents
.....

И т. Д. Каждый раз, когда стекувеличивается для поддержания счетчика программы в каждом из циклов и в конечном итоге вызывает переполнение.

...