C#做音乐播放器时在自动下一曲中报异常的解决办法
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
在利用Media Player做音乐播放器的时候,实现自动下一曲的功能是在PlayStateChange事件下,通过判断当前播放器的状态来实现。
首先需要在状态属性playState中的MediaEnded状态下,将下一曲的URL赋值给当前的mediaPlay,然后在playState中的Ready状态下调用MediaPlay的Ctlcontrols.play()方法,然后就可以实现自动播放下一曲的功能,但是遇到一个问题就是,在调用play()中报了一个异常,异常代码为:HRESULT:0xC00D1054。
解决办法:在这个状态下,先判断URL的值是否是当前歌曲列表中选定的项,也就是说判断在当前的MediaPlay中赋值的URL是否赋值成功。要求就是:要先改变界面上歌曲列表中的选择项,然后再为URL赋值,否则同样会报错。
贴上整个解决异常后整个PlayStateChange事件中的代码:
#region 实现自动下一曲的功能
//这个事件会和StatueChange事件存在一个线程之间的调度问题,这个事件没有执行完成,可能就会触发另外一个StatueChange事件,另外一个StatueChange事件中又会触发这个事件,如此的反复。这种事件队列和事件压栈的发生,导致事件之间的调度上面比较混乱,可以通过单步调试来查看执行过程
/// <summary>
/// 实现自动下一曲的功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
private void axMediaPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
//在正常播放的时候,播放完成的状态,这个状态后,会重新读取媒体文件,此时重新赋值URL,但是这这个状态下调用播放是不起作用的
if (listSong.Count < 0)
{
return;
} if (axMediaPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
{
//int index = listShowSong.SelectedIndex;
//index++;
//if (index > listSong.Count - 1)
//{
// listShowSong.SelectedIndex = 0;
// axMediaPlayer.URL = listSong[0];
//}
//else
//{
// 先改变选择项,后进行赋值
// listShowSong.SelectedIndex = index;
// axMediaPlayer.URL = listSong[index];
//} //简写代码(有点长):
axMediaPlayer.URL=listSong[ listShowSong.SelectedIndex + 1 > listSong.Count - 1 ? listShowSong.SelectedIndex = 0 : ++listShowSong.SelectedIndex];
}
//这个状态的判断必须要在上一个状态后面,因为需要在上一个状态中进行对URL赋值,同时,由于判断状态不一样,在事件的压栈上面处理的顺序也就不一样
if (axMediaPlayer.playState == WMPLib.WMPPlayState.wmppsReady)
{
//加了这个判断的要求就是,在上一个MediaEnded中要先改变显示歌曲的listbox中的选择项,然后再对URL赋值,否则这个判断就不起作用
if (axMediaPlayer.URL == listSong[listShowSong.SelectedIndex])
{
try //点击停止后再播放容易出问题,try一下就OK了
{
axMediaPlayer.Ctlcontrols.play();
}
catch(Exception ex)
{
}
}
} } #endregion
上面代码中:axMediaPlayer是程序中MediaPlay组件的名称;listShowSong 是界面上用来显示歌曲列表的一个ListBox控件;listSong是程序后台中用来存放和界面上歌曲列表中歌曲名顺序相对应的URL的一个List<string>集合,里面的值和listShowSong 里面的值是一一对应关系。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
C#做音乐播放器时在自动下一曲中报异常的解决办法的更多相关文章
- 自定义css样式结合js控制audio做音乐播放器
最近工作需求需要播放预览一些音乐资源,所以自己写了个控制audio的音乐播放器. 实现的原理主要是通过js调整audio的对象属性及对象方法来进行控制: 1.通过play().pause()来控制音乐 ...
- 用mciSendString做音乐播放器
音乐操作类 public class clsMCI { public clsMCI() { // // TODO: 在此处添加构造函数逻辑 // } //定义API函数使用的字符串变量 [Marsha ...
- 抓某音乐播放器时现在多了个vkey,导致播放地址有问题,如何抓到vkey
一:在已经通过axios和vue-cli本地服express通过地址获取到songmid这个参数 在js里面地址和参数如下: // 获取歌手和歌曲的详细信息 export function getSi ...
- vue——一个页面实现音乐播放器
请忽略下面这段文字年关将至,时间好歹又多出了些许.却不敢过度消遣.岁月未曾饶过我,我亦不想饶过岁月.且将它塞得膨胀,让这一年看似加更充实.不曾料想我一个爱些风花雪月.研墨行歌之人,却做起了碼农这一行当 ...
- QT5:C++实现基于multimedia的音乐播放器(二)
今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: //播放模式 void Music::musicPlayPattern() { //z=++z%3; ) { //顺序播放 pla ...
- 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)
前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ...
- MediaPlayer音乐播放器、上一首、下一首、播放、停止、自动下一首、进度条
本文介绍MediaPlayer的使用.MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用Med ...
- [ 原创 ]学习笔记-做一个Android音乐播放器是遇到的一些困难
最近再做一个安卓的音乐播放器,是实验室里学长派的任务,我是在eclipse上进行开发的,由于没有android的基础,所以做起来困难重重. 首先是布局上的困难 1.layout里的控件属性不熟悉 2. ...
- Andriod小项目——在线音乐播放器
转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...
随机推荐
- partial class 说明
C# 2.0 可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 例如:下面的PartialTest类 class PartialTest { string ...
- php的swoole扩展中onclose和onconnect接口不被调用的问题
在用swoole扩展写在线聊天例子的时候遇到一个问题,查了不少资料,现在记录于此. 通过看swoole_server的接口文档,回调注册接口on中倒是有明确的注释: * swoole_server-& ...
- mysql 导入导出数据库、数据表
Linux下 均在控制台下操作. 导入数据库: 前提:数据库和数据表要存在(已经被创建) (1)将数据表 test_user.sql 导入到test 数据库的test_user 表中 [root@te ...
- C++求最小公倍数
题目内容:求两个正整数的最小公倍数. 输入描述:输入数据含有不多于50对的数据,每对数据由两个正整数(0<n1,n2<100000)组成. 输出描述:对于每组数据n1和n2,计算最小公倍数 ...
- android Material Design:主题
<style name="MyTheme" parent="@android:style/android:Theme.Material"> < ...
- HDFS文件读写流程
一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访问.大量 ...
- 给Activity设置背景颜色
为了使得错误提示更加显眼,再用Toast+振动效果之外考虑变换整个activity的背景颜色. 尝试一: activity并没像winform一样直接给个属性来设置,就想获取整个activity的la ...
- js代码优化
1.减少Jquery使用 处理dom遍历和复杂的脚本场景时,jquery可能有很大的帮助,不过在处理简单的.直截了当的代码场景就会迟缓.尽可能的避免jquery对象创建,尤其在循环中. 2.优化循环 ...
- STM32F0xx_看门狗(独立+窗口)配置详细过程
Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...
- Python脚本控制的WebDriver 常用操作 <六> 打印当前页面的title及url
下面将使用WebDriver来答应浏览器页面的title和访问的地址信息 测试用例场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例: 假设1个页面的title应该是'hel ...