1

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);
       }
4

1 に答える 1

1

私が正しく理解していればultimateCollection、ページから移動した後もコレクションを残しておく必要があります。あなたの例では、それはページのフィールド変数であるため、破棄されることは理にかなっています。あなたがしたいのは、アプリのどこからでもアクセスできる静的なプレイリストを用意することです。

ultimateCollectionApp.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);

コレクションに追加するときにスレッドの問題が発生する可能性がありますが、これにより、プレイリストに曲を追加してページから移動できるようになります。これが役立つかどうか教えてください。

乾杯、アル。

于 2011-10-11T16:06:10.933 に答える