Programm anhalten für 5 Sekunden
-
Hi,
zunächst einmal was ich vorhab:
Ich gebe in ein Textfeld "Würfelt.." aus. Anschliessend soll das Programm warten (Aber nicht total eingefroren werden, wie es bei System.Threading.Thread.Sleep(5000); der Fall ist). Anschliessend soll die gewürfelte Zahl ausgegeben werden (mittels Grafik).Nun meine Frage:
Wie kann es machen, dass dqas Programm für 5 Sekunden nicht mehr weiter geht?
MFG Lyrix
-
Lyrix schrieb:
(Aber nicht total eingefroren werden, wie es bei System.Threading.Thread.Sleep(5000); der Fall ist).
Bei Sleep() wird doch gar nicht das ganze Programm eingefroren. Das Ding ist genau das, was du brauchst. Es legt den aktuellen Thread schlafen. Wenn dadurch das ganze Programm scheinbar hängt liegt es daran, dass du andere Dinge, die eigentlich weiterlaufen sollten im selben Thread tust.
Am einfachsten ist es, du tust die ganze Anzeige inklusive Pause in einem eigenen Thread erledigen.
-
hi,
Danke für die Antwort, doch bin ich imo ein wenig überfragt.
Dies ist mein Code:
if(Spieler.Anz_Player>1) { this.Ausgabe_Player1.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler1.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[0]+".bmp")) as Image; this.Ausgabe_Player1.Text = ""; this.Ausgabe_Player2.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler2.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[1]+".bmp")) as Image; this.Ausgabe_Player2.Text = ""; } if(Spieler.Anz_Player>2) { this.Ausgabe_Player3.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler3.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[2]+".bmp")) as Image; this.Ausgabe_Player3.Text = ""; } if(Spieler.Anz_Player>3) { this.Ausgabe_Player4.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler4.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[3]+".bmp")) as Image; this.Ausgabe_Player4.Text = ""; } if(Spieler.Anz_Player>4) { this.Ausgabe_Player5.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler5.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[4]+".bmp")) as Image; this.Ausgabe_Player5.Text = ""; } if(Spieler.Anz_Player>5) { this.Ausgabe_Player6.Text = "würfelt..."; //Hier Soll Pause Rein this.WürfelSpieler6.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[5]+".bmp")) as Image; this.Ausgabe_Player6.Text = ""; }
Was meisnt du nun genau mit eigenen Thread?
-
Lyrix schrieb:
Was meisnt du nun genau mit eigenen Thread?
Hmmmm wenn es so ist, ist es vielleicht doch besser, du verwendest einfach einen Timer, stellst ihn auf 5 Sekunden und wenn er ausgelöst wird, kannst du die gewürfelte Zahl ausgeben.
-
sihste ich hab dir doch gesagt nimm einen timer...
private bool weiter = false; private void timer1_Tick(object sender, System.EventArgs e) { weiter = true; timer1.Enabled=false; }
und dann
[cs]if(Spieler.Anz_Player>1)
{
this.Ausgabe_Player1.Text = "würfelt...";//Hier Soll Pause Rein
this.timer1.Enabled = true;
for(;weiter != true;);
weiter = false;
//pause endethis.WürfelSpieler1.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[0]+".bmp")) as Image;
this.Ausgabe_Player1.Text = "";this.Ausgabe_Player2.Text = "würfelt...";
//Hier Soll Pause Rein
this.timer1.Enabled = true;
for(;weiter != true;);
weiter = false;
//pause endethis.WürfelSpieler2.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[1]+".bmp")) as Image;
this.Ausgabe_Player2.Text = "";
}[cs]müsst so funktionieren glaub ich
-
kleiner denkfehler ...
so geht es :
private void timer1_Tick(object sender, System.EventArgs e) { this.WürfelSpieler1.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[0]+".bmp")) as Image; this.Ausgabe_Player1.Text = ""; timer1.Enabled=false; }
-
So mein Hauptteil sieht nun so aus:
if(Spieler.Anz_Player>1) { temp3=1; this.Ausgabe_Player1.Text = "würfelt..."; temp2=1; timer1.Enabled=true; while(temp3==1); temp3=1; this.Ausgabe_Player2.Text = "würfelt..."; temp2=2; timer1.Enabled=true; } if(Spieler.Anz_Player>2) { while(temp3==1); temp3=1; this.Ausgabe_Player3.Text = "würfelt..."; temp2=3; timer1.Enabled=true; } if(Spieler.Anz_Player>3) { while(temp3==1); temp3=1; this.Ausgabe_Player4.Text = "würfelt..."; temp2=4; timer1.Enabled=true; } if(Spieler.Anz_Player>4) { while(temp3==1); temp3=1; this.Ausgabe_Player5.Text = "würfelt..."; temp2=5; timer1.Enabled=true; } if(Spieler.Anz_Player>5) { while(temp3==1); temp3=1; this.Ausgabe_Player6.Text = "würfelt..."; temp2=6; timer1.Enabled=true; }
Das ist mein Timer:
private void timer1_Tick(object sender, System.EventArgs e) { switch(temp2) { case 1: this.WürfelSpieler1.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[0]+".bmp")) as Image; this.Ausgabe_Player1.Text = ""; // timer1.Enabled=false; // this.Ausgabe_Player2.Text = "würfelt..."; break; case 2: this.WürfelSpieler2.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[1]+".bmp")) as Image; this.Ausgabe_Player2.Text = ""; timer1.Enabled=false; // if(Spieler.Anz_Player>2) // this.Ausgabe_Player3.Text = "würfelt..."; break; case 3: this.WürfelSpieler3.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[2]+".bmp")) as Image; this.Ausgabe_Player3.Text = ""; timer1.Enabled=false; // if(Spieler.Anz_Player>3) // this.Ausgabe_Player4.Text = "würfelt..."; break; case 4: this.WürfelSpieler4.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[3]+".bmp")) as Image; this.Ausgabe_Player4.Text = ""; timer1.Enabled=false; // if(Spieler.Anz_Player>4) // this.Ausgabe_Player5.Text = "würfelt..."; break; case 5: this.WürfelSpieler5.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[4]+".bmp")) as Image; this.Ausgabe_Player5.Text = ""; timer1.Enabled=false; // if(Spieler.Anz_Player>5) // this.Ausgabe_Player6.Text = "würfelt..."; break; case 6: this.WürfelSpieler6.Image = new Bitmap(assembly.GetManifestResourceStream("Risiko.Grafiks.Würfel"+Zufall[5]+".bmp")) as Image; this.Ausgabe_Player6.Text = ""; timer1.Enabled=false; break; } temp3=0; }
Doch irgendwie habe ich so 2 Probleme.
-
Es wird immer nur der Letzte Würfel angezeigt, und dann auch nur ab und an...
-
Mit der "Warte - funktion" hängt sich das Prog einfach auf.
Wisst ihr woran das liegen könnte?
Achja: Die temp Attribute habe ich vorerst global gemacht.
-