2016-09-20 103 views
0

代码:事件处理程序触发System.StackOverflowException

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(); 会出现此应用程序应该计算阶乘。

+0

嗨雷。考虑将整个方法添加到您的代码示例中,并让我们知道什么事件触发它。我想我有下面的答案,但编辑这将有所帮助。 –

回答

3

我认为这就是所谓的在你TextBox.TextChanged事件。发生这种情况时:textBox.Text = sb.ToString(); 它增加了一个string没有“!”该文本框,然后将其改变,然后触发事件,然后:

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

增加了一个,然后触发它再次删除事件“!”。 FOREVAR!

最好的办法是分配sb.ToString()另一个变量,比文本框等。

0

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

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

请仔细看一下执行实际阶乘计算的代码。

相关问题