C# 如何在“Listview”中的最后一首歌曲后停止播放音乐`

C# 如何在“Listview”中的最后一首歌曲后停止播放音乐`,c#,uwp,C#,Uwp,在我的Raspberry pi3 UWP应用程序中,我有一个音乐播放器,可以播放列表视图中的歌曲。您可以在列表视图中选择任何歌曲,然后它将自动播放下一首歌曲。我面临的问题是,当它到达最后一首歌并完成时,它会再次播放,而且不会停止。就像它在最后一首歌中循环,而不是在播放后停止 有人能告诉我如何停止循环吗 这是我的代码: private async void SongClicked(object sender, ItemClickEventArgs e) { var

在我的Raspberry pi3 UWP应用程序中,我有一个音乐播放器,可以播放
列表视图中的歌曲。您可以在
列表视图中选择任何歌曲,然后它将自动播放下一首歌曲。我面临的问题是,当它到达最后一首歌并完成时,它会再次播放,而且不会停止。就像它在最后一首歌中循环,而不是在播放后停止

有人能告诉我如何停止循环吗

这是我的代码:

    private async void SongClicked(object sender, ItemClickEventArgs e)
    {
        var file = await KnownFolders.MusicLibrary.GetFileAsync(e.ClickedItem.ToString());
        if (file != null)
        {
            var stream = await file.OpenReadAsync();
            mediaElement.SetSource(stream, file.ContentType);
            mediaElement.Play();
        }
    }

    private void mediaItemList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

    }

    private void objMediaPlayer_MediaOpened(object sender, RoutedEventArgs e)
    {
        mediaElement.Play();
    }

    private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
    {
        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 async void(对象发送方,ItemClickEventArgs e)
{
var file=await KnownFolders.MusicLibrary.GetFileAsync(例如ClickedItem.ToString());
如果(文件!=null)
{
var stream=await file.OpenReadAsync();
mediaElement.SetSource(stream,file.ContentType);
mediaElement.Play();
}
}
private void mediaItemList_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
}
私有void objMediaPlayer_mediaopend(对象发送方,路由目标)
{
mediaElement.Play();
}
私有异步void objMediaPlayer_MediaEnded(对象发送方,RoutedEventArgs e)
{

如果(AudioFilesLV.SelectedIndexHi并欢迎使用stackoverflow, 问题是否可能出现在事件objMediaPlayer_MediaEnded的if条件的第一行,因为您到达了列表的末尾并设置了

AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex = 1;
所选索引现在应再次小于AudioFilesLV.Items.Count

该行应更改为:

AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex + 1;
B因为在if的情况下,您将计算所选的索引。此时,所选的索引应始终为1

如果您需要计算SelectedIndex以选择下一首歌曲,她就是一个例子:

private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
    // If the end of the ListView is reached and the last song was played stop.
    if ((AudioFilesLV.SelectedIndex + 1) == AudioFilesLV.Items.Count)
    {
       mediaElement.Stop();
    }
    else
    {
       // This line you should try to change. When the last song was not played 
       //-> select next one and play them.
        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();
        }
    }
}
那么我为什么要这样做呢

(AudioFilesLV.SelectedIndex + 1)
在本例中。因为在任何情况下,AudioFilesLV.SelectedIndex(SelectedIndex从0开始)都比AudioFilesLV.Items.Count(Count从1开始)小一个

我希望这对你有帮助。

试试这个

private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
    {
        AudioFilesLV.SelectedIndex += 1;
        if (AudioFilesLV.SelectedIndex <= AudioFilesLV.Items.Count - 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 async void objMediaPlayer_mediated(对象发送方,RoutedEventArgs e)
{
AudioFilesLV.SelectedIndex+=1;

如果(SelectedIndex if语句中的AudioFilesLV.SelectedIndex尝试使用<而不是Hi,谢谢,我已经尝试过了,但不起作用,仍在重复播放最后一个。谢谢,不太明白你说的话。你可以根据我上面的代码给出一个例子吗?您好,我希望这个例子可以帮助您解决问题。太棒了,谢谢您现在可以使用了,谢谢您的解释!!