音乐停止播放时出现"Value does not fall within the expected range"错误



在我的 UWP 应用中,我有一个ListView,所有歌曲都显示在Music Library文件夹中。 当您单击一首歌曲时,它将播放它并在第一首歌曲停止时移动到下一首歌曲。 所有这些都很好用,但是当最后一首歌曲播放并到达末尾时,我收到此错误

System.ArgumentException
HResult=0x80070057
Message=Value does not fall within the expected range.
Source=Windows
StackTrace:
at Windows.UI.Xaml.Controls.Primitives.Selector.put_SelectedIndex(Int32 value)

这是我的代码:

private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
mediaElement.Stop();
if (AudioFilesLV.SelectedIndex <= AudioFilesLV.Items.Count)
{
AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex += 1;
var file = await KnownFolders.MusicLibrary.GetFileAsync(AudioFilesLV.SelectedItem.ToString());
if (file != null)
{
var stream = await file.OpenReadAsync();
mediaElement.SetSource(stream, file.ContentType);
mediaElement.Play();
}
}
else
{
mediaElement.Stop();
}
}
private void mediaItemList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void objMediaPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
mediaElement.Play();
}

应用程序在此行崩溃:

AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex += 1;

我无法弄清楚问题是什么。 我认为它正在寻找下一首歌,但没有一首。 所以我需要告诉应用程序在播放最后一首歌曲后停止,但不知道如何做到这一点?

谢谢

编辑

private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
int LastPlayedIndex;
LastPlayedIndex = AudioFilesLV.SelectedIndex;
AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex = 1;
var file = await KnownFolders.MusicLibrary.GetFileAsync(AudioFilesLV.SelectedItem.ToString());
if (AudioFilesLV.SelectedIndex < AudioFilesLV.Items.Count && AudioFilesLV.SelectedIndex != LastPlayedIndex)
{
var stream = await file.OpenReadAsync();
mediaElement.SetSource(stream, file.ContentType);
mediaElement.Play();
}
else
{
mediaElement.Stop();
}
}

看起来AudioFilesLV.SelectedIndex += 1AudioFilesLV.Items.Count多?上面的条件是"<=",因此索引可能超出范围。 也许需要另一次检查,如果.选定索引在列表中排在最后,在这种情况下不增加值?

相关内容

最新更新