首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在文件完成后自动播放播放列表中的下一个文件?

如何在文件完成后自动播放播放列表中的下一个文件?
EN

Stack Overflow用户
提问于 2017-09-01 02:01:47
回答 1查看 837关注 0票数 1

我在C# WPF做过自己的音乐播放器。但是,我不能让它自动播放播放列表中的下一个文件时,一首歌已经完成。我有一个滑块来显示播放进度,一个复选框和下一个按钮。

下面是Next按钮的代码:

代码语言:javascript
复制
private void btnNext_Click(object sender, RoutedEventArgs e)
{
    if (listBox.SelectedIndex < listBox.Items.Count - 1)
    {
       listBox.SelectedIndex = listBox.SelectedIndex + 1;
       TagLib.File tagFile = TagLib.File.Create((listBox.SelectedValue).ToString());
       string album = tagFile.Tag.Album;
       string artist = tagFile.Tag.FirstAlbumArtist;
       string title = tagFile.Tag.Title;
       uint year = tagFile.Tag.Year;
       string genre = tagFile.Tag.FirstGenre;
       lblName.Content = artist + " - " + title;
       lblAlbum.Content = album;
       lblArtist.Content = artist;
       lblTitle.Content = title;
       lblYear.Content = year;
       lblGenre.Content = genre;
       lblBit.Content = tagFile.Properties.AudioBitrate + " kbps";
       lblTime2.Content = tagFile.Properties.Duration.ToString(@"mm\:ss");
       mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
       mediaPlayer.Play();
       btnPlay2.Visibility = Visibility.Hidden;
       btnPause.IsEnabled = true;
    } 
}

下面是滑块的代码:

代码语言:javascript
复制
private void sliProgress_DragStarted(object sender, DragStartedEventArgs e)
{
    userIsDraggingSlider = true;
}

private void sliProgress_DragCompleted(object sender, DragCompletedEventArgs e)
{
    userIsDraggingSlider = false;
    mediaPlayer.Position = TimeSpan.FromSeconds(sliProgress.Value);
}

private void sliProgress_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    lblTime.Content = TimeSpan.FromSeconds(sliProgress.Value).ToString(@"mm\:ss");
}

我尝试在单击Next按钮时实现Next按钮中的过程,方法是比较歌曲/文件(lblTime2)的最大持续时间(lblTime)和进度持续时间(LblTime)是否相等:

代码语言:javascript
复制
private void radioAll_Checked(object sender, RoutedEventArgs e)
    {
        if (lblTime.Content.ToString() == lblTime2.Content.ToString())
        {
            if (listBox.SelectedIndex < listBox.Items.Count - 1)
            {
                listBox.SelectedIndex = listBox.SelectedIndex + 1;
                TagLib.File tagFile = TagLib.File.Create((listBox.SelectedValue).ToString());
                string album = tagFile.Tag.Album;
                string artist = tagFile.Tag.FirstAlbumArtist;
                string title = tagFile.Tag.Title;
                uint year = tagFile.Tag.Year;
                string genre = tagFile.Tag.FirstGenre;
                lblName.Content = artist + " - " + title;
                lblAlbum.Content = album;
                lblArtist.Content = artist;
                lblTitle.Content = title;
                lblYear.Content = year;
                lblGenre.Content = genre;
                lblBit.Content = tagFile.Properties.AudioBitrate + " kbps";
                lblTime2.Content = tagFile.Properties.Duration.ToString(@"mm\:ss");
                mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
                mediaPlayer.Play();
            }
        }
    }

不幸的是,它根本不能工作。我漏掉了什么吗?我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 02:46:52

订阅MediaPlayer.MediaEnded事件并适当处理。

MSDN:

在媒体完成播放时发生。

例如:

代码语言:javascript
复制
mediaPlayer.MediaEnded += OnMediaEnded;

mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
mediaPlayer.Play();
.
.
.

private void OnMediaEnded(object sender, EventArgs e) 
{
    // play next song
}    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45992392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档