Выполните итерацию по перечислению и проверьте состояние MediaPlayer, прежде чем перейти к следующей песне.
Мне нужно проигрывать песни в моей коллекции IEnumerable, но с этим методом связано много проблем. Если я использую таймер для проверки MediaState, он может работать, однако при переходе с этой страницы класс будет отменен, а музыка остановлена. Причина, по которой я хочу это сделать, состоит в том, чтобы иметь возможность воспроизводить песни из разных альбомов:
Мой код:
private SongCollection mySongCollection;
IEnumerable<Song> ultimateCollection;
mySongCollection = library.Albums[index].Songs;
ultimateCollection = mySongCollection.Concat(library.Albums[1].Songs);
foreach (Song a in ultimateCollection)
{
while (MediaPlayer.State == MediaState.Playing || MediaPlayer.State == MediaState.Paused)
{
//while MediaState still playing, dont play next song
}
MediaPlayer.Play(a);
}
1 ответ
Если я правильно понимаю, вы хотите коллекцию ultimateCollection
оставаться после того, как вы ушли со страницы. В вашем примере имеет смысл, что он уничтожен, поскольку является полевой переменной страницы. То, что вы хотите сделать, - это иметь статический список воспроизведения, доступный из любого места в вашем приложении.
Я бы предложил переехать ultimateCollection
в App.xaml
public IList<Song> UltimateCollection {get; private set;}
// and then somewhere else in App.xaml.cs where your player is looping through the songs
int i=0;
while(i<UltimateCollection.Count)
{
Song a = UltimateCollection[i];
MediaPlayer.Play(a);
while (MediaPlayer.State == MediaState.Playing || MediaPlayer.State == MediaState.Paused)
{
//while MediaState still playing, dont play next song
}
}
затем из другой части вашего приложения, скажем, с другой страницы, вы можете добавить в эту коллекцию
App.UltimateCollection.Add(someSong);
При добавлении в коллекцию могут возникнуть проблемы с многопоточностью, но это должно позволить вам добавлять песни в плейлист и переходить со страницы. Позвольте мне знать, если это помогает.
Ура, Ал.