Выполните итерацию по перечислению и проверьте состояние MediaPlayer, прежде чем перейти к следующей песне. - PullRequest
1 голос
/ 10 августа 2011

Мне нужно воспроизвести песни в моей коллекции 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 Ответ

1 голос
/ 11 октября 2011

Если я правильно понимаю, вы хотите, чтобы коллекция 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);

При добавлении в коллекцию могут возникнуть проблемы с многопоточностью, но это должно позволить вам добавлять песни в плейлист и перемещаться со страницы. Дайте мне знать, если это поможет.

Cheers, Al.

...