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];
}
}
};
}
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.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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