Entwickler-Ecke

WinForms - Fortschrittswiedergabe während laufender Schleife


MetaPhy - Sa 03.03.07 22:28
Titel: Fortschrittswiedergabe während laufender Schleife
Hallo,

ich habe einen Button programmiert das Ereignis zu simulieren, 4 Würfel zu werfen. Der Zähler wird nun stets um einen hochgezählt, wenn genau 3 gleiche Zahlen sich ergeben (am Beispiel a=b=c, man muss die Anzahl hinterher also noch mit 4 multiplizieren, da die anderen drei Fälle a=b=d, a=c=d und b=c=d fehlen). Ein kleines Wahrscheinlichkeitssimulationsprogramm.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
private void button1_Click(object sender, EventArgs e)
        {
            int zaehler = 0;

            Random rnd = new Random();
      
            for (int i=1; i<=10000; i++)
            {
                                   
            int a = rnd.Next(1,7);
            int b = rnd.Next(1,7);
            int c = rnd.Next(1,7);
            int d = rnd.Next(1,7);

            if ((a == b && a == c && a > d) || (a==b && a==c && a<d))
            {
                zaehler = zaehler + 1;
                label1.Text = Convert.ToString(zaehler);
            }
            }


Nun die Frage: Warum tut das Programm dies nicht? Ich meine: Warum wird der zum String convertierte zaehler nicht während der Laufenden Schleife ständig neu angezeigt? Im Taschenrechner geht das ganz einfach und man sieht, wie die Zahl immer größer wird, aber hier gibts erst nach dem kompletten Durchlaufen der Schleife die Zahl, obwohls im Code ja anders steht. Was tun, damits so wird? Natürlich habe ich dann auch vor i selbst als Fortschrittsanzeige anzuzeigen, macht wohl mehr Sinn.


Gruß
Hüseyin


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 03.03.2007 um 21:33


Christian S. - Sa 03.03.07 22:40

Hallo!

Während der Schleife wird die GUI nicht aktualisiert. Um das zu erreichen, musst Du in der Schleife Application.DoEvents(); analog zum Application.ProcessMessages; in Delphi aufrufen.

Auch hier gilt: Rufe das besser nicht in jedem Schleifendurchlauf auf, sonst wird das Ganze zu lahm. Also vielleicht in jedem 100sten Durchlauf oder so.

Grüße
Christian


MetaPhy - Sa 03.03.07 22:52

Und nochmals danke für deine Zeit!