C#编程:非.net控件WindowsMediaPlayer的使用与问题解决
需积分: 10 201 浏览量
更新于2024-07-25
收藏 872KB DOC 举报
本文主要讨论的是在C#中使用Windows Media Player(WMP)控件的挑战和细节。首先,作者提到了在.NET环境中引入非.NET控件的过程,如WMP控件,需要通过Visual Studio (VS) 自动调用AxImp.exe工具将原始DLL或OCX转换为AxHost包装的程序集,生成AxInterop.WMPLib.dll和Interop.WMPLib.dll文件,以便在C#项目中使用。
问题的核心在于如何正确地在C#中实例化和使用这种非可视化控件。作者指出,直接在窗体的构造函数中new一个AxWindowsMediaPlayer实例并试图立即使用它,可能会导致`System.Windows.Forms.AxHost+InvalidActiveXStateException`异常。这是因为非可视化的控件实例需要被添加到可视化的容器(如窗体的Controls集合)中才能正常工作。如果代码写在窗体的Load或Load之后的事件中,并确保窗体被显示,就能避免这个问题。
作者通过实验得出结论,非可视化的AxWindowsMediaPlayer实例不能在非可视化类中创建,必须将其添加到可视化的控件容器中才能确保控件的初始化和正确执行。例如,将实例化和设置URL的代码放在窗体的Load事件中,如:
```csharp
private void Form1_Load(object sender, EventArgs e)
{
AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer();
this.Controls.Add(wmp);
wmp.URL = "约定.mp3";
wmp.Ctlcontrols.play();
}
```
此外,作者还观察到,在拖拽控件到窗体后,VS自动生成的代码与手动创建实例的代码存在差异,主要体现在一对圆括号的缺失,即`((System.ComponentModel.ISupportInitialize(wmp)).BeginInit()`和`((System.ComponentModel.ISupportInitialize(wmp)).EndInit())`,这是为了正确处理控件的布局和释放资源所必需的。
使用非.NET的Windows Media Player控件在C#中需要特别注意控件的生命周期管理和可视化容器的关联,尤其是在初始化过程中,遵循正确的事件处理和控件管理方式可以避免常见问题。
2015-11-30 上传
104 浏览量
477 浏览量
2023-10-02 上传
2023-05-24 上传
2023-06-03 上传
2023-10-06 上传
2023-06-10 上传
2024-01-18 上传
c学习
- 粉丝: 0
- 资源: 1
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据