Laden...

Wie kann ich kontrollieren, ob gerade eine MP3-Datei im MediaPlayer läuft?

Erstellt von Kriz vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.290 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 3 Jahren
Wie kann ich kontrollieren, ob gerade eine MP3-Datei im MediaPlayer läuft?

Guten Morgen,

Ich tue mich etwas schwer mit meinem Mediaplayer...
Ich möchte kontrollieren, ob gerade ein MP3 läuft, wenn nicht, soll eins gestartet werden. Die Kontrolle, ob etwas läuft, soll ununterbrochen stattfinden, also in eine while-Schleife gepackt.
Um meinen Main Thread nicht zu blockieren, starte ich dies in einem separaten Thread, dann startet aber die Musik nicht. Erst wenn ich einen Breakpoint setze geht es los.

Aufruf aus meinem Mainthread:

Task.Run(() => StartPlayer());

Mein Player:

private Task StartPlayer()
        {
            mediaPlayer = new MediaPlayer();
            while (true)                
            {
                if (mediaPlayer.Position <= new TimeSpan(0,0,0))
                {
                    if (Playlist.Count > 0)
                    {
                        
                        mediaPlayer.Close();
                        mediaPlayer.Open(new Uri(Playlist[0].Location));
                        mediaPlayer.Play();
                        CurrentTitle = Playlist[0];
                    }
                }
            
            };
        }
C
2.121 Beiträge seit 2010
vor 3 Jahren

Details über den Mediaplayer kenne ich nicht, aber anhand deinem Code könnte das ein möglicher Ansatz sein.

soll ununterbrochen stattfinde

Das tut sie auch, so schnell es geht.
Das lastet deinen Thread komplett aus, der macht so schnell es ihm möglich ist den Player zu und wieder auf.
Wahrscheinlich kommt er deswegen nicht dazu etwas abzuspielen, denn selbst nach dem Play Aufruf ist Position immer noch kurz 0 und führt dazu dass er wieder geschlossen und neu gestartet wird.

16.827 Beiträge seit 2008
vor 3 Jahren

Du hast ein Poll-Prinzip gebaut, was man eigentlich in der Software vermeiden will: weil es last kostet.
Du kontrollierst so schnell es geht, mit der gesamten Power Deiner Maschine, die ganze Zeit das gleiche Zeug: das kostet unheimlich viel Leistung.
iOS und Android verbieten genau solche Software Umsetzungen, weil sie durch den enormen Leistungshunger den Akku leer saugen.

Arbeite mit Benachrichtigungen, was in Deiner Software passiert; also mit Subscriptions und Events.
Aber nicht mit enorm Leistungsintensivem Polling und einer Endlosschleife.

5.658 Beiträge seit 2006
vor 3 Jahren

Falls du den System.Windows.Media.MediaPlayer meinst, dann gibt es dort das MediaEnded-Event, auf das du reagieren kannst.

Weeks of programming can save you hours of planning