アイテムのリストを再生する必要があるメディアプレーヤーがあります。ユーザーはそれらの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が複数と呼ばれることがわかりました。また、この呼び出し回数は常に変化しています。
なぜ私のコードはこの振る舞いをするのですか?