Laden...

PictureBox Bild anzeigen und zeitgleich Sound wiedergeben

Erstellt von marbig01 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.712 Views
M
marbig01 Themenstarter:in
2 Beiträge seit 2020
vor 4 Jahren
PictureBox Bild anzeigen und zeitgleich Sound wiedergeben

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??

4.939 Beiträge seit 2008
vor 4 Jahren

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.

M
marbig01 Themenstarter:in
2 Beiträge seit 2020
vor 4 Jahren

Vielen Dank Th69 für die Antwort. Werde ich nachher mal ausprobieren. 😉