使用Windows Media Player 其实就是使用组件AxWindowsMediaPlayer。

   添加两个引用:Interop.WMPLib.dll和AxInterop.WMPLib.dll。
       添加命名空间using AxWMPLib;

在使用时还有两个基本的条件:1、控件要依附在某个父控件上,比如form,panel;因为这样可以让组件保持长期性(网上这样说)。2、依附的控件是要有句柄;3、在使用前进行如下的初始化:

                  ((System.ComponentModel.ISupportInitialize)(this.ax1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ax1)).EndInit();

  第一种情况不满足时,出现错误“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常,解决的办法可以像这样:

         AxWindowsMediaPlayer ax1 = new AxWindowsMediaPlayer();
Form f = new Form();
f.Controls.Add(ax1);

  但是,这个Form不是按常规来创建的,据个人猜测是没有执行像CreateWindow类似的函数吧。所以它是没有句柄的,这样情况出现如下:
         在一个类库中想使用AxWindowsMediaPlayer,并且使用了多线程:

          class DDX
{
AxWindowsMediaPlayer ax1 = new AxWindowsMediaPlayer();
Form f = new Form();//为了满足条件1 public delegate void STARTSOUND(bool b);//委托,副线程中调用主线程上的组件 public DDX()
{
int i = f.Handle;//这是为了满足条件2,这样操作的作用是强制为f创建句柄,以使Invoke方法能执行
}
void button1_click(object o,EventArgs e)
{
new Thread(new ThreadStart(InmoitorFun)).start();
} void InmoitorFun()//因为是在线程中,所以要使用控件的Invoke来调用方法,ax1是在主线程中创建的
{
while(true)
{
...
f.Invoke(new STARTSOUND(StartSound),new object[]{false});//一定要有前面的int i = f.Handle,不然会出现异常,Invoke方法执行的条件
...
}
} void StartSound(bool b)
{
((System.ComponentModel.ISupportInitialize)(this.ax1)).BeginInit();//还要进行初始化,为了满足第3个条件,
((System.ComponentModel.ISupportInitialize)(this.ax1)).EndInit();
ax1.URL="F:\\1.mp3";
ax1.settings.setMode("loop",true);
ax1.play();
}
}

最新文章

  1. Android数据存储之GreenDao 3.0 详解
  2. amazeui折叠面板智能化展开
  3. [flex布局]-flex教程
  4. C# Using 用法
  5. Ubuntu配置java环境变量
  6. Careercup - Google面试题 - 4857362737266688
  7. redo buffer大小
  8. .net faq
  9. js中使用队列发送ajax请求
  10. hdu 3290 (简单dfs)
  11. Drupal 7 电子邮件的发送设置 SMTP, Mail System, Mime Mail
  12. [NOI 2014]魔法森林
  13. [机器学习]集成学习--bagging、boosting、stacking
  14. 【转】Chrome 控制台新玩法-console显示图片以及为文字加样式
  15. 在 Python 中使用 in_memory 工作空间
  16. 我的vim(持续更新)
  17. 二 random模块
  18. iOS - WKWebView的使用和长按手势识别二维码并保存
  19. hdu 4004 最大值最小化
  20. <P>标签小细节

热门文章

  1. Java创始人
  2. [转]oracle设计数据库应选择正确的数据类型
  3. 我的第一个jsp程序-实现注册登录留言功能
  4. iOS开发--利用MPMoviePlayerController播放视频简单实现
  5. 100722A
  6. spring3使用task:annotation-driven开始定时
  7. Leetcode Find Minimum in Rotated Sorted Array I and II
  8. 【caffe】执行训练
  9. VS调试时同时启动多个项目解决方法
  10. Android成长日记日记-Debug调试程序