Laden...

Stack Overflow Exception

Erstellt von xrc7581 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.003 Views
xrc7581 Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren
Stack Overflow Exception

Hallo,
folgender Code gibt mir eine "Stack Overflow Exception" und ich weiß nicht warum.


if (mnuEKPreiseZeigen.Checked == true)
            {

                mnuEKPreiseZeigen.Checked = false;
            }
            else
                mnuEKPreiseZeigen.Checked = true;

die Exception hat folgenden Wortlaut:
Der Ausdruck kann nicht ausgewertet werden, weil sich der aktuelle Thread in einem Stapelüberlaufzustand befindet.

eine Innerexeption wird leider nicht angezeigt.

Gelöschter Account
vor 13 Jahren

ich würde hier vermuten, das dieser code vom CheckedChanged Event aufgerufen wird. Somit hast du eine Endlosschleife, bis der Stack explodiert.

xrc7581 Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

Hallo,
danke für die Antwort.

Was man manchmal für einen Mist programmiert,der Code macht absolut keinen Sinn. 🙄

458 Beiträge seit 2007
vor 13 Jahren

By the way:

if (mnuEKPreiseZeigen.Checked == true)
            {

                mnuEKPreiseZeigen.Checked = false;
            }
            else
                mnuEKPreiseZeigen.Checked = true; 

ist in meinen Augen kein guter Code.

  1. kannst und solltest du dir das "== true" sparen.
  2. benutzt du beim if Klammern, beim else nicht.. wenn dann solltest du es schon einheitlich machen
  3. koenntest du den Code zu einem einfachen
mnuEKPreiseZeigen.Checked = mnuEKPreiseZeigen.Checked ? false : true;

umgestalten, ist imho eleganter.

be the hammer, not the nail!

6.862 Beiträge seit 2003
vor 13 Jahren

Bzw. einfach

mnuEKPreiseZeigen.Checked = !mnuEKPreiseZeigen.Checked

schreiben 😉

Zu dem == false/true siehe auch [Tipp] Anfängerfehler == true / == false

Baka wa shinanakya naoranai.

Mein XING Profil.

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo xrc7581,

hat sich dein Problem inzwischen gelöst oder besteht das Problem immer noch? Was ist _mnuEKPreiseZeigen _ein "normales" WinForms/WPF-Control oder hast du es selber programmiert? Vielleicht liegt es daran, dass - wenn du das Control selbst programmiert hast - in _Checked _irgendwas passiert, wodurch die StackOverflowException geworfen wird. Ansonsten schau mal im StackTrace nach.

Abgesehen von deinem Problem, ist es einfacher, wenn du folgendes schreibst:

myCheckBox.Checked = !myCheckBox.Checked;

Ansonsten ist es doppelt gemoppelt.

zero_x

xrc7581 Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

Hallo,

ich habe jetzt die Variante benutzt.
Problem ist gelöst.


myCheckBox.Checked = !myCheckBox.Checked;

mnuEKPreisAnzeigen ist ein ToolStripMenuItem.

Was mir beim Debuggen aufgefallen ist,daß das Event CheckChanged mehrfach aufgerufen wird und damit in eine Endlosschleife geht.

458 Beiträge seit 2007
vor 13 Jahren

Bzw. einfach

mnuEKPreiseZeigen.Checked = !mnuEKPreiseZeigen.Checked  

schreiben 😉

Das stimmt natuerlich, Negation ist nur nicht jedermanns Ding 😉

be the hammer, not the nail!

4.939 Beiträge seit 2008
vor 13 Jahren

Hallo xrc7581,

wenn du innerhalb des CheckedChanged-Events wieder den Checked-Status ändern willst, dann schau mal in [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung (um die Endlos-Rekursion zu vermeiden).