2k Aufrufe
Gefragt in Anwendungen(Java,C++...) von cyberrob Mitglied (737 Punkte)
Hab ein kleines Schleifenproblem in C#.
Und zwar mit folgendem Code:

for (int i = Rnd.Next (1,1000000); i >= 14000000; i++)

if (i >= 14000000)
{
this.sbRotateImage.Pause();
}

Also ich definiere i als Zufallszahl mit ner gewissen Obergrenze aber deutlich kleiner als die Bedingung für i. Anschließend soll i erhöht werden, bis es 14000000 entspricht oder eben drüber lieht. Bin mir nicht ganz sicher, was bei i++ am Ende ausgegeben wird.
Nun, anschließend würde ich halt gerne den da stehenden Befehl ausführen. Der soll mir eine Drehung eines bildes anhalten. komischerweise wird der nie ausgeführt.

Was mache ich falsch?

Alternativ habe ich versucht die if Abfrage wegzulassen und den Code direkt auszuführen, also im Anschluss.... Auch hier leider kein Erfolg. Irgendwie frisst das den Codeschnipsel nicht!

8 Antworten

0 Punkte
Beantwortet von
Hi,

weiss nicht wie Du Rnd deklariert hast, wichtig ist allerdings daß um die For Schleifen auch Klammern sind. Mit folgendem Schnipsel hats funktioniert habe allerdings Deinen Befehl gegen Messagebox ausgetauscht zum Testen.

Random Rnd = new Random();
for (int i = Rnd.Next(1, 1000000); i<=1400000;i++ )
{

if (i >= 1400000)
{
MessageBox.Show("Dot Net is cool.");
}
}
0 Punkte
Beantwortet von
Upps sorry du solltest natürlich in der Schleife for i<= 1500000 oder was auch immer angegeben, damit klappts
0 Punkte
Beantwortet von
for (int i = Rnd.Next(1, 1000000); i<=1500000;i++ )
{

if (i >= 1400000)
{
MessageBox.Show("Dot Net is cool.");
}
}
0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
Danke für die Antwort.
Die Random Klasse habe ich bereits über allem deklariert. Genauso, wie du es geschrieben hast.
Das problem ist nicht die Erzeugung der Zufallszahl.
Die Klammern habe ich jetzt so gesetzt, das Ergebnis ist leider nach wie vor das Selbe.
Der Code
"this.sbRotateImage.Pause();" wird entweder direkt ausgeführt, oder aber es lassen sich nicht
this.sbRotateImage.Begin(); und
this.sbRotateImage.Pause(); im selben Button verwenden. Jedenfalls beginnt das Bild sich nicht zu drehen, erst wenn ich die untere Zeile entsprechend auskommentiere. Das Problem ist dann aber, dass es nicht mehr aufhört, sich zu drehen.
Ich möchte unbedingt vermeiden, das über einen 2. Button zu lösen. Dann aber funktioniert es zuverlässig.

Habe ich das mit der Schleife falsch verstanden?
Wird das Event
this.sbRotateImage.Pause();
bereits IN der Schleife ausgeführt? Denn ich will es ja DANACH ausführen.
0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
Also klappt nach wie vor leider nicht:
Drum jetzt doch mal den ganzen Code ;)

private void button1_Click_2(object sender, RoutedEventArgs e)
{
Random Rnd = new Random();
int startwert = 2;
sbRotateImage.SpeedRatio = startwert;
sbRotateImage.RepeatBehavior = new RepeatBehavior(TimeSpan.FromSeconds(15)); //beeinflusst wohl nur die insgesamtzeitdauer, dreht 15 sec

sbRotateImage.Begin();
for (int i = Rnd.Next(1, 100000); i<=1500000; i++)
{

if (i >= 1400000)
{
sbRotateImage.Pause();
}
}
}

Es funktioniert SO nicht. Aber, wenn ich die Zeile sbRotateImage.Pause() auskommentiere dreht sich alles wie gewünscht, hält halt nicht mehr an.
0 Punkte
Beantwortet von
In Deinem letzten Posting wird die Pause in der Schleife durchgeführt sobald 1400000 erreicht sind und darüber, d. h. er macht ab da nur noch Pause.
0 Punkte
Beantwortet von
Wann soll er denn anhalten?
0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
sobald i > 14000000 ist. Denn zu Beginn, bei Klick auf den button, soll er die Aktion ja starten. Bis der Counter dann soweit hochgelaufen ist vergehen ungefähr 14 sekunden. Je nachdem, welchen Startwert das programm für i erhält. Aber es müsste sich sichtbar was tun. Hab i auch mal fest als 0 deklariert, keine Veränderung.
Die Timer Klassen die ich kenne, lassen sich leider für WindowsPhone Apps nicht nutzen, weshalb ich auf i++ zurückgreife.
In einer anderen App funktioniert das allerdings auch wunderbar, verstehe nicht, was hier schief läuft.
...