事件处理程序触发System.StackOverflowException

时间:2016-09-20 00:01:56

标签: c# event-handling stack-overflow

代码:

 private void addExcel(object sender, TextChangedEventArgs e)
 {
        if (!textBox.Text.Contains('!'))
        {
            textBox.Text += "!";
        }
        StringBuilder sb = new StringBuilder();
        sb.Append(textBox.Text);
        sb.Remove(textBox.Text.IndexOf('!'), 1);
        textBox.Text = sb.ToString();
 }

http://i66.tinypic.com/24cy1aq.png sb.ToString();中发生例外 这个应用程序应该计算阶乘。

2 个答案:

答案 0 :(得分:3)

我认为这是在TextBox.TextChanged事件中调用的。发生这种情况时:textBox.Text = sb.ToString(); 它添加string没有“!”到文本框,然后更改,然后触发事件,然后:

if (!textBox.Text.Contains('!'))
        {
            textBox.Text += "!";
        }

添加“!”,然后触发再次删除它的事件。 FOREVAR!

最好的办法是将sb.ToString()分配给另一个变量,而不是文本框。

答案 1 :(得分:0)

根据您提供的代码,无法告诉您应用程序出了什么问题;该代码不包含堆栈溢出。

我假设您正在使用递归来计算阶乘。可能的罪魁祸首是你得到的递归结束条件错误,实际上是无休止的递归。发生堆栈溢出的确切位置通常无关紧要;它恰好是导致分配推动堆栈超过限制的命令。

仔细查看进行实际因子计算的代码。