1

アイテムのリストを再生する必要があるメディアプレーヤーがあります。ユーザーはそれらの1つを選択できるため、アイテムは選択可能である必要があり、反対側ではすべてが順番に再生できます。しかし、順番にプレイするのを待っていると、マディアプレーヤーがいくつかのアイテムをスキップしているのを見ました。例えば;

1 -> is played
2 -> is played
3 -> is skipped
4 -> is played
5 -> is skipped
6 -> is skipped
7 -> is skipped 
8 -> is played

この問題の原因がわかりません。アイディアがある?

これは私のメディア要素です。

   <StackPanel x:Name="PlayerStackPanel" Orientation="Horizontal">
        <MediaElement x:Name="Player" 
                      MediaOpened="Player_MediaOpened"      
                      MediaEnded="Player_OnMediaEnded">
        </MediaElement>
   </StackPanel>

最初の項目が選択された後、selectionchangedコードが実行されます。

    void ItemListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (this.UsingLogicalPageNavigation()) this.InvalidateVisualState();

        PlayView();

        selectedItem = sender as Selector;
        ContentItem pc = (ContentItem)selectedItem.SelectedItem;
        if (pc != null && !string.IsNullOrEmpty(pc.AudioFilePath))
        {
            Player.Source = new Uri(this.BaseUri, "../Assets/" + pc.AudioFilePath);
            Player.Play();
        }
        else
            Player.Source = null;           
    }

最初のオーディオアイテムが終了すると、Player_OnMediaEndedメソッドが呼び出されます。プログラムでselectedindexを増やしたいのですが、このイベントの後、selectionchangedが再度実行されます。

    private void Player_OnMediaEnded(object sender, RoutedEventArgs e)
    {
        ticks.Stop();
        ticks.Tick -= ticks_Tick;
        Player.Stop();
        if (this.itemListView.SelectedIndex != contentItems.Count-1)
        this.itemListView.SelectedIndex += 1;
    }

デバッグでは、1つのオーディオファイルが終了した後、mediendedが複数と呼ばれることがわかりました。また、この呼び出し回数は常に変化しています。

なぜ私のコードはこの振る舞いをするのですか?

4

1 に答える 1

0

解決しました。

継続時間スライダーを使用していましたが、メディアプレーヤーが終了すると、それも終了する必要があります。ただし、同期できない場合があるため、キューに入れられたオーディオアイテムに対して継続時間スライダーが正しく機能せず、すぐに次のアイテムに対して終了し、他のアイテムをスキップします。

于 2013-02-18T13:56:46.110 に答える