gpt4 book ai didi

c# - 如何在 `Listview` 中的最后一首歌后停止音乐播放

转载 作者:行者123 更新时间:2023-12-04 09:42:01 25 4
gpt4 key购买 nike

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

有人可以指导我如何停止循环吗?

这是我的代码:

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

任何帮助将不胜感激。

谢谢。

最佳答案

嗨,欢迎来到 stackoverflow,
问题是否可能出在 objMediaPlayer_MediaEnded 事件中 if 条件的第一行。因为你到达列表的末尾并设置

AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex = 1;

SelectedIndex 现在应该再次小于 AudioFilesLV.Items.Count。

该行应更改为:
AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex + 1;

因为然后你在 if 情况下计算 SelectedIndex 。目前 SelectedIndex 应始终为 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(计数从 1 开始)在每种情况下都少一。

我希望这可以帮助你。

关于c# - 如何在 `Listview` 中的最后一首歌后停止音乐播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62285702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com