windows phone7 中实现单曲循环播放
来源:互联网 发布:小跳蛙怎么火了 知乎 编辑:程序博客网 时间:2024/04/29 14:31
在wp7中利用mediaelement播放一首音乐,要求单曲循环播放!本以为很简单,按照自然的想法:首先音乐play,当播放完毕时会产生mediaEnded事件,在事件处理器中调用play()函数,再次播放,不就实现循环播放了吗?
<MediaElement x:Name="fangbo" AutoPlay="False" Source="fangbo5s.mp3" MediaEnded="fangbo_MediaEnded" DataContext="{Binding}" /> <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="142,236,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
private void button1_Click(object sender, RoutedEventArgs e) { fangbo.Play(); } private void fangbo_MediaEnded(object sender, RoutedEventArgs e) { fangbo.Play(); }
运行,发现没有实现循环播放,只是为什么呢?</p><p>仔细研究MediaElement类,发现这样一个细节:(http://msdn.microsoft.com/en-us/library/cc189079(VS.95).aspx)
From the Playing state, the MediaEnded event may be raised if the media is finished. When this happens, the state may transition to either Stopped orPaused.
就是说在媒体播放完毕时,MediaEnded事件将被调用,这是currentstate可能变为Stopped或Paused!也就是说当播放完毕时,state不一定变为stopped,还有可能是Paused。
可以设想如果变成了paused,再次调用play时,将从“当前位置”播放,一旦播放,又停止,因为已经在文件的最末尾了。然后又出发了ended事件,再次调用play()。。。。
解决办法很简单:在play之前先调用stop,使得当前的state从paused变为stopped。这样紧接着调用play,事实证明这样的思路是正确的。
另外考虑到如下规则:
Avoid "Not specified" states. For example, you should not call the Play method while the media is in the Opening state. To avoid this, you could check the CurrentState of the MediaElement before allowing Play to be called
在调用之前先判断一下当前的state是否处在opening状态。最终代码如下:
private void button1_Click(object sender, RoutedEventArgs e) { fangbo.Play(); } private void fangbo_MediaEnded(object sender, RoutedEventArgs e) { if (fangbo.CurrentState != System.Windows.Media.MediaElementState.Opening) { fangbo.Stop(); fangbo.Play(); } }
- windows phone7 中实现单曲循环播放
- QT中phonon框架实现单曲循环
- 单曲循环还是随机播放
- iOS AVPlayer播放模式的实现(随机播放 列表循环 单曲循环)
- C#WindowsMediaPlayer的播放模式实现(单曲循环、列表循环、随机播放)
- Windows Phone7 实现文件上传
- windows phone7中多线程实例
- 单曲循环:一人一wifi
- MediaPlayer单曲循环不卡顿
- 实现Windows Phone7 的DataTemplateSelector和CustomDataTemplateSelector
- 实现Windows Phone7 的DataTemplateSelector和CustomDataTemplateSelector
- Qt使用phonon单曲循环
- iOS中UIScrollView实现图片循环播放
- Windows Phone7中的IronRuby
- silverlight-windows-phone7
- Windows Phone7的新版本
- windows phone7.5
- windows phone7 模拟器试用
- UNIX 高手的另外 10 个习惯
- RAMFS和TMPFS两种文件系统
- C#调用 Web Service
- 创建oracle数据库,及建完后各种优化
- Hibernate中get和load方法的区别
- windows phone7 中实现单曲循环播放
- fatal error c1010
- proguard 使用
- 布局布线前的预备知识
- 显卡处理图像数据的过程
- 如何使用线程池(C#)
- 各大牛逼网站推荐系统
- 住宿环境
- bitmap应用