2016-09-20 5 views
0

Code:Event Handler löst 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 Die Ausnahme in sb.ToString(); tritt Diese Anwendung soll factorials berechnen.

+0

Hallo Ray. Erwägen Sie, die gesamte Methode zu Ihrem Codebeispiel hinzuzufügen, und lassen Sie uns wissen, welches Ereignis sie auslöst. Ich denke, ich habe die Antwort unten, aber das Bearbeiten wäre hilfreich. –

Antwort

3

Ich nehme an, dass dies in Ihrem TextBox.TextChanged Ereignis aufgerufen wird. Wenn das passiert: textBox.Text = sb.ToString(); Es fügt eine string ohne "!" in das Textfeld, das dann geändert wird, die dann das Ereignis auslöst, das dann:

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

fügt ein, die dann löst das Ereignis, wo es wieder entfernt wird „!“. VORSIEH!

Ihre beste Wette ist, dass Sie sb.ToString() einer anderen Variablen als der Textbox zuweisen.

0

Es ist unmöglich, Ihnen anhand des von Ihnen bereitgestellten Codes zu sagen, was mit Ihrer Anwendung nicht in Ordnung ist. Dieser Code enthält keinen Stack-Überlauf.

Ich nehme an, Sie verwenden Rekursion, um faktorials zu berechnen. Der wahrscheinliche Täter ist, dass Sie die Rekursions-Endbedingung falsch verstanden haben und sich tatsächlich auf einer endlosen Rekursion befinden. Der genaue Ort, an dem ein Stapelüberlauf auftritt, ist normalerweise immateriell; Es ist zufällig der Befehl, der die Zuteilung verursacht hat, die den Stack über das Limit geschoben hat.

Werfen Sie einen Blick auf den Code, der die tatsächliche faktorielle Berechnung durchführt.