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
Wie kann ich kontrollieren, ob gerade eine MP3-Datei im MediaPlayer läuft?
Kriz
myCSharp.de - Member



Dabei seit:
Beiträge: 115

Themenstarter:

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

beantworten | zitieren | melden

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];
                    }
                }
            
            };
        }
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.106

beantworten | zitieren | melden

Details über den Mediaplayer kenne ich nicht, aber anhand deinem Code könnte das ein möglicher Ansatz sein.
Zitat
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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.931

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers