MediaPlayer类侦听NaturalDuration.HasTimeSpan更改

时间:2013-09-10 18:36:16

标签: c# wpf

我正在使用MediaPlayer类在c#中编写自定义音频播放器。我已经实现了滚动条,因此用户可以通过轨道搜索,这就是我遇到问题的地方。

当用户选择音轨(从xml播放列表加载)时,应用会计算音轨的长度(以秒为单位),并将其设置为滚动条的最大值。这一切都很好,除了 NaturalDuration.TimeSpan 属性有时返回0而不是金额。我已经通过添加一个循环来证明这一点,当 NaturalDuration.HasTimeSpan 为真时退出该循环,然后返回NaturalDuration.TimeSpan值。

我的问题是,当 NaturalDuration.HasTimeSpan 更改为true时,如何才能获得 NaturalDuration.TimeSpan

1 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是处理MediaPlayer.MediaOpened事件:

mediaPlayer = new MediaPlayer();
mediaPlayer.MediaOpened += MediaPlayer_MediaOpened;
mediaPlayer.Open(new Uri(mediaFilePath, UriKind.Absolute));

...

private void MediaPlayer_MediaOpened(object sender, EventArgs e)
{
    if (mediaPlayer.NaturalDuration.HasTimeSpan)
    {
        SliderMaximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds;
        mediaPlayer.Play();
    }
}