【发布时间】:2016-09-09 10:26:48
【问题描述】:
我很快创建了一个 Windows 窗体项目,该项目加载了具有浮点值的不同文本框的 GUI。其中一些确实已经初始化了一个值。所有文本框都必须在其中一个更改后更新。
public Form1()
{
InitializeComponent();
initializeValues();
calculateValues();
}
public void initializeValues()
{
//textboxes are filled/initialized with default float values
}
public void calculateValues()
{
//here all textboxes are new calculated and updated
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
calculateValues();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
calculateValues();
}
问题:
当我执行这个项目时,它会抛出一个未处理的 StackOverflowException(无限循环或无限递归)。我认为这是因为在 calculateValues() 方法期间,文本框的文本将被更改,然后事件处理程序被激活。这就是无限循环:-(
我必须如何更改上面的代码结构以避免这种情况?
谢谢。
【问题讨论】:
-
设置断点,单步执行你的代码,你会发现你的怀疑是正确的。只需在之前取消订阅事件,并在更改后重新订阅。
-
在抛出 Win32 异常时将您的 IDE 设置为中断。您将拥有整个调用堆栈,立即放弃,为什么您有无限循环/无限递归。
标签: windows forms loops infinite eventhandler