我的程序在运行代码时抛出了StackOverflowException。我不太清楚是什么导致它,但我认为这与代码每秒运行大约100次这一事实有关。
我有一个间隔为1毫秒的定时器(Timer1)。我希望代码尽可能快地运行而不使用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
。
答案 0 :(得分:2)
问题可能是您从计时器调用DoEvents()。 doevents可能会收到一个调用DoEvents()的定时器消息。等等。
答案 1 :(得分:1)
在我看来,这就像代码重新进入问题一样。当你调用do事件时,你的代码在这个事件中循环。这允许应用程序更新和处理包括循环在内的事件,等等。
所以你的代码最终以
运行Do
Doevents
Do
Doevents
Do
Doevents
Do
Doevents
.....
依此类推,每次堆栈增长时都要在每个循环中维护程序计数器,最终导致溢出。