Iterator Schlüsselwort verursacht Probleme

  • C#
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Iterator Schlüsselwort verursacht Probleme

    Wollte heute mal wieder etwas programmieren und mir ist plötzlich was passiert:

    Dieses Code-Snippet:

    C#-Quellcode

    1. public class TestKlasse
    2. {
    3. public static IEnumerable<bool> Test()
    4. {
    5. MessageBox.Show("OK");
    6. yield return true;
    7. }
    8. }


    und nen button hiermit

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. IEnumerable<bool> lBools = TestKlasse.Test();
    4. }



    Was passiert?

    Gar nichts.

    Setze anschliessend einen Break-point am ende der button1_click methode um mir den inhalt von lBools ausgeben zu lassen
    und dabei kratzt die IDE ab (wenn Ich auf Auflistung anzeigen drücke) bzw kommt manchmal auch "Das Timeout für die funktionsauswertung wurde überschritten"

    Woran kann das liegen?

    Habe nichts verändert seit dem Ich das letzte mal was programmiert hab (war ca vor paar wochen)

    Das passiert übrigens nur wenn ich dieses yield return benutze, ansonsten gehts.

    (MSDN msdn.microsoft.com/de-de/library/ms234762.aspx hat mir auch nicht weitergeholfen)
    VS begibt sich in eine Endlosschleife, da es keine Abbruchbedingung deiner Test()-Methode gibt (dein Enumerator gibt quasi eine "unendliche" Liste zurück). Irgendwann musst du die Methode "verlassen", also ohne yield.

    Das war Quatsch... Die Methode wird ja verlassen. Die MessageBox wird den Ablauf blockieren und dadurch dem Timeout auslösen.
    Mit freundlichen Grüßen,
    Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Aber vorher hat das problem funktioniert,
    auserdem wird das soviel Ich weiß intern mit dem Enumerator geregelt.
    Die Methode wird nachdem yield return xy ja sowieso verlassen, da dannach nichts mehr folgt aber selbst wenn ich mit yield break; das manuell abbreche funktioniert es nicht.


    € Hab den Fehler:

    Messagebox scheint in einer iterator funktion nicht zu funktioniere (wenn Ich die messagebox wegmache funzt es ganz normal)