导致此StackOverflowException的原因是什么?

时间:2012-02-06 19:42:27

标签: .net vb.net stack-overflow

我的程序在运行代码时抛出了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运行时抛出错误。

NumericUpDown1NumericUpDown2的最大值为10000

2 个答案:

答案 0 :(得分:2)

问题可能是您从计时器调用DoEvents()。 doevents可能会收到一个调用DoEvents()的定时器消息。等等。

答案 1 :(得分:1)

在我看来,这就像代码重新进入问题一样。当你调用do事件时,你的代码在这个事件中循环。这允许应用程序更新和处理包括循环在内的事件,等等。

所以你的代码最终以

运行
Do
Doevents
Do
Doevents
Do
Doevents
Do
Doevents
.....

依此类推,每次堆栈增长时都要在每个循环中维护程序计数器,最终导致溢出。