Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
PictureBox Bild anzeigen und zeitgleich Sound wiedergeben
marbig01
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

PictureBox Bild anzeigen und zeitgleich Sound wiedergeben

beantworten | zitieren | melden

Hallo, ist meine erste Frage hier. Hoffe ich habe alles richtig gemacht. Gegoogelt und hier gesucht hab ich auch! Keine passende Antwort dabei.

Habe grad ein Pokerspiel mit Visual Studio 2019 erstellt. Funktioniert auch alles wunderbar. Die Karten werden per Zufall ermittelt, in ein Array geschrieben und angezeigt.


       private void CmdAusteilen_Click(object sender, EventArgs e)
        {
                    string Bildname1 = "Bild" + c[1];
                    PicBoxMeine1.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject(Bildname1);

                    string Bildname2 = "Bild" + c[2];
                    PicBoxMeine2.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject(Bildname2);
		    .
		    .
		    .
        }
Aber die Karten werden alle auf einmal angezeigt. Nun habe ich mir gedacht: Wäre doch schön wenn er die erste Karte hinlegt, Zeitgleich einen kleinen Sound abspielt (Kartengebegeräusch, 350 Millisekunden), bisschen Pause, Die zweite Karte mit Sound, bisschen Pause usw. usw.
Wenn ich das aber so mache wie unten passiert folgendes: Er spielt den Sound ab, wartet 2 Sekunden, spielt dann nochmal den Sound ab, wartet wieder 2 Sekunden usw. Und wenn er damit fertig ist dann legt er wieder alle Karten auf einmal hin. So soll es ja nun nicht sein ;)


       private void CmdAusteilen_Click(object sender, EventArgs e)
        {
                    string Bildname1 = "Bild" + c[1];
                    PicBoxMeine1.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject(Bildname1);
                    meineWav.Play();
                    Thread.Sleep(2000);

                    string Bildname2 = "Bild" + c[2];
                    PicBoxMeine2.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject(Bildname2);
                    meineWav.Play();
                    Thread.Sleep(2000);
		    .
		    .
		    .
        }
Wie könnte ich es machen das er Karte hinlegt, Sound abspielt und dann die Pause macht??
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.359

beantworten | zitieren | melden

Hallo und willkommen,

lies mal [FAQ] Warum blockiert mein GUI?

Eine mögliche Lösung ist mittels asynchroner Programmierung, d.h. statt Thread.Sleep benutzt man Task.Delay:


private async void CmdAusteilen_Click(object sender, EventArgs e) // beachte "async" hinzuschreiben!
{
   // ...
   await Task.Delay(2000);
   // ...
}
Evtl. mußt du dann noch zusätzlich (vor dem Task.Delay) für deine PictureBoxen Refresh() bzw. Update() aufrufen, damit die Anzeige sofort aktualisiert wird.
private Nachricht | Beiträge des Benutzers
marbig01
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Vielen Dank Th69 für die Antwort. Werde ich nachher mal ausprobieren. ;)
private Nachricht | Beiträge des Benutzers