【问题标题】:Getting a "Value does not fall within the expected range" error when music stops playing音乐停止播放时出现“值不在预期范围内”错误
【发布时间】:2020-06-06 16:41:31
【问题描述】:

在我的 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();
        }
    }

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

    看起来AudioFilesLV.SelectedIndex += 1AudioFilesLV.Items.Count 多?上面的条件是“

    【讨论】:

    • 您好,感谢您的回复。我尝试不增加值,但在我的列表视图中的最后一首歌曲之后它仍然没有停止播放,它只是不断重复最后一首歌曲。
    • 您可以尝试将条件 AudioFilesLV.SelectedIndex &lt;= AudioFilesLV.Items.Count 更改为 AudioFilesLV.SelectedIndex &lt; AudioFilesLV.Items.Count,因此如果 SelectedIndex == Items.Count - else 条件与 mediaElement.Stop(); 应该执行。
    • 或者另一个疯狂的想法 - 你可以用 try-catch 块覆盖错误代码来捕获这个异常并做一些事情:-)
    • 我已经尝试了你的建议(更新了我的问题),但仍然重复上一首列表视图歌曲
    • 好的。如何在某个地方创建一个变量,比如int LastPlayedIndex?当你调用mediaElement.Play();时,你可以设置LastPlayedIndex = SelectedIndex,然后在开头这样检查:if (AudioFilesLV.SelectedIndex &lt; AudioFilesLV.Items.Count &amp;&amp; AudioFilesLV.SelectedIndex != LastPlayedIndex)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多