我正在使用MediaPlayer类在c#中编写自定义音频播放器。我已经实现了滚动条,因此用户可以通过轨道搜索,这就是我遇到问题的地方。
当用户选择音轨(从xml播放列表加载)时,应用会计算音轨的长度(以秒为单位),并将其设置为滚动条的最大值。这一切都很好,除了 NaturalDuration.TimeSpan 属性有时返回0而不是金额。我已经通过添加一个循环来证明这一点,当 NaturalDuration.HasTimeSpan 为真时退出该循环,然后返回NaturalDuration.TimeSpan值。
我的问题是,当 NaturalDuration.HasTimeSpan 更改为true时,如何才能获得 NaturalDuration.TimeSpan ?
答案 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();
}
}