2016-09-20 3 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

Hi Ray. Подумайте о добавлении всего метода к вашему примеру кода и сообщите нам, какое событие запускает его. Я думаю, что у меня есть ответ ниже, но редактирование было бы полезно. –

ответ

3

Я предполагаю, что это вызвано в вашем TextBox.TextChanged событии. Когда это произойдет: textBox.Text = sb.ToString(); Он добавляет string без "!" в текстовое поле, которое затем изменено, который затем запускает событие, которое затем:

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

добавляет, который затем запускает событие, где он снова удаляется «!». FOREVAR!

Лучше всего назначить sb.ToString() другой переменной, кроме текстового поля.

0

Невозможно рассказать вам, что не так с вашим приложением, основываясь на коде, который вы предоставили; этот код не содержит переполнение стека.

Я предполагаю, что вы используете рекурсию для вычисления факториалов. Вероятным виновником является то, что вы закончили конечное условие рекурсии и на самом деле на бесконечной рекурсии. Точное место, где происходит переполнение стека, - обычно нематериальный; это просто команда, которая вызвала выделение, которое подтолкнуло стек к пределу.

Присмотритесь к коду, который выполняет фактический факторный расчет.