本页说明在 .NET Framework 4.8 窗体项目中播放本地音视频:优先使用操作系统自带的 Windows Media Player COM 组件(经互操作程序集调用),并补充纯框架的 SoundPlayer(仅 WAV)。目标框架以 LCode 默认的 .NET 4.8 为准;示例面向 C# 5.0 与 VB.NET(勿用 C# 6+ 语法如字符串插值、nameof)。操作文案以 LCode 中文界面为准。添加引用通用步骤见 引用 DLL

选用哪种方式

方式 程序集 / 组件 适用
Windows Media Player(COM,推荐) 系统 wmp.dll → 互操作 WMPLib(工程内常生成 Interop.WMPLib);嵌入窗体时另需 AxWMPLib.AxWindowsMediaPlayer 常见本地音频/视频(依本机解码器)。不必引入第三方播放库
System.Media.SoundPlayer System(框架自带) WAV;无视频、无进度条控件。适合短提示音
第三方播放器 / WebView2 HTML5 另引 DLL,或见 WebView2 编解码要求特殊时再考虑;本页不展开
提示:.NET Framework 本身没有通用「万能音视频控件」;WinForms 场景下用系统 WMP COM 是常见的内置路径。LCode 工具箱未预置 Windows Media Player ActiveX 项——通过「添加引用 → COM」引入类型库后,用代码创建播放器(无界面或 Ax 控件)。

在 LCode 中添加 COM 引用

窗体应用入门 建好「Windows 应用程序」后:

  1. 在项目浏览器中选中窗体项目(或展开其下的引用节点)。
  2. 右键项目(或「引用」)→ 添加引用;也可菜单 项目 → 添加引用
  3. 切换到 COM 页签。列表列标题为名称路径
  4. 在列表中找到 Windows Media Player(路径通常指向本机 wmp.dll,如 C:\Windows\System32\wmp.dll)。若名称略有差异,以本机已注册类型库为准。
  5. 选中后点 选择(E),确认右侧「选择引用」出现该项,再确定。
  6. 菜单 编译 → 编译解决方案F8)。成功后工程会通过 COM 互操作得到 WMPLib 命名空间(编译消息可能出现「创建COM互操作程序集…」)。
界面 / 项 说明
添加引用 → COM 从本机已注册类型库添加 COM 引用(LCode 侧栏页签文案为「COM」)
名称 / 路径 COM 列表两列;选 Windows Media Player,路径指向 wmp.dll
选择(E) 把当前项加入「选择引用」列表
本地复制 / 嵌入互操作(interop)类型 COM 互操作程序集可按需设本地复制;也可在引用属性中启用「嵌入互操作(interop)类型」以减小部署体积
提示:LCode 主界面 NuGet 包管理暂不支持,待更新完善——本页不依赖 NuGet。若 COM 列表中没有 Windows Media Player,说明本机未安装/未注册 WMP(少见;部分精简系统可能缺组件),需先在操作系统侧恢复媒体功能后再引用。

DLL 与程序集说明

名称 角色 如何得到
wmp.dll 系统原生 Windows Media Player COM 实现 随 Windows 安装;勿拷入工程当普通托管 DLL 引用
Interop.WMPLib.dll(命名空间 WMPLib 托管互操作包装;提供 WindowsMediaPlayer 等类型 LCode「添加引用 → COM」后由构建生成/引用;也可在开发机用 tlbimp 生成后按 引用 DLL 浏览添加
AxInterop.WMPLib.dll(命名空间 AxWMPLib WinForms ActiveX 包装;提供可嵌入窗体的 AxWindowsMediaPlayer LCode 不会在仅添加 COM 引用时自动生成。在已装 .NET SDK / 开发工具的机器上对 wmp.dll 运行 aximp(如 aximp %windir%\System32\wmp.dll),再把生成的 Ax 互操作程序集浏览引用进工程,并保证与 WMPLib 匹配
注意:目标平台(x86 / x64 / AnyCPU)须与本机可加载的 WMP 位数一致,否则运行时可能出现 COM 创建失败。调试时若 64 位进程加载异常,可先将工程平台改为 x86 验证。详见 运行与编译

常用成员(WMPLib)

成员 类型 说明
URL 属性 媒体路径或地址(本地文件路径或 URL)
controls.play / pause / stop 方法 播放、暂停、停止
controls.currentPosition 属性 当前播放位置(秒)
settings.volume 属性 音量 0–100
settings.mute 属性 是否静音
playState 属性 播放状态枚举(未就绪、播放中、暂停、停止等)
AxWindowsMediaPlayer.Ctlcontrols 属性 嵌入式 Ax 控件上的控制接口(对应非 Ax 的 controls
uiMode(Ax) 属性 界面模式,如 full / mini / none / invisible

最小播放示例(WMPLib,无界面)

仅添加 COM 引用即可编译。适合音频或「只播不嵌控件」;视频画面不会出现在窗体上(系统可能弹出/占用 WMP 窗口,视版本与设置而定)。在窗体上放按钮 btnPlaybtnStop,路径改成你的媒体文件。

C#
using System;
using System.Windows.Forms;
using WMPLib;

public partial class Form1 : Form
{
    private WindowsMediaPlayer player;

    public Form1()
    {
        InitializeComponent();
        player = new WindowsMediaPlayer();
        player.settings.autoStart = false;
        player.settings.volume = 80;
    }

    private void btnPlay_Click(object sender, EventArgs e)
    {
        // 换成实际文件;也可是 http(s) 流地址(视本机编解码而定)
        player.URL = @"C:\Media\demo.mp3";
        player.controls.play();
    }

    private void btnStop_Click(object sender, EventArgs e)
    {
        player.controls.stop();
    }

    protected override void OnFormClosed(FormClosedEventArgs e)
    {
        if (player != null)
        {
            player.controls.stop();
            player.close();
            player = null;
        }
        base.OnFormClosed(e);
    }
}
VB.NET
Imports System.Windows.Forms
Imports WMPLib

Public Class Form1
    Private player As WindowsMediaPlayer

    Public Sub New()
        InitializeComponent()
        player = New WindowsMediaPlayer()
        player.settings.autoStart = False
        player.settings.volume = 80
    End Sub

    Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
        ' 换成实际文件;也可是 http(s) 流地址(视本机编解码而定)
        player.URL = "C:\Media\demo.mp3"
        player.controls.play()
    End Sub

    Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
        player.controls.stop()
    End Sub

    Protected Overrides Sub OnFormClosed(e As FormClosedEventArgs)
        If player IsNot Nothing Then
            player.controls.stop()
            player.close()
            player = Nothing
        End If
        MyBase.OnFormClosed(e)
    End Sub
End Class

嵌入窗体(AxWindowsMediaPlayer)

需要在窗体内显示播放器界面时,引用 AxWMPLib(见上文 aximp),再在代码中创建控件。LCode 设计器工具箱暂不支持一键拖入该 ActiveX(「选择工具箱项 / COM 组件」向导暂不支持,待更新完善),请用代码添加。

C#
using System;
using System.ComponentModel;
using System.Windows.Forms;
using AxWMPLib;

public partial class Form1 : Form
{
    private AxWindowsMediaPlayer axPlayer;

    public Form1()
    {
        InitializeComponent();
        axPlayer = new AxWindowsMediaPlayer();
        ((ISupportInitialize)axPlayer).BeginInit();
        axPlayer.Name = "axPlayer";
        axPlayer.Dock = DockStyle.Fill;
        Controls.Add(axPlayer);
        ((ISupportInitialize)axPlayer).EndInit();
        axPlayer.uiMode = "full";
    }

    private void btnPlay_Click(object sender, EventArgs e)
    {
        axPlayer.URL = @"C:\Media\demo.mp4";
        axPlayer.Ctlcontrols.play();
    }
}
VB.NET
Imports System.ComponentModel
Imports System.Windows.Forms
Imports AxWMPLib

Public Class Form1
    Private axPlayer As AxWindowsMediaPlayer

    Public Sub New()
        InitializeComponent()
        axPlayer = New AxWindowsMediaPlayer()
        CType(axPlayer, ISupportInitialize).BeginInit()
        axPlayer.Name = "axPlayer"
        axPlayer.Dock = DockStyle.Fill
        Controls.Add(axPlayer)
        CType(axPlayer, ISupportInitialize).EndInit()
        axPlayer.uiMode = "full"
    End Sub

    Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
        axPlayer.URL = "C:\Media\demo.mp4"
        axPlayer.Ctlcontrols.play()
    End Sub
End Class

仅 WAV:SoundPlayer

不引入 COM 时,可用框架自带的 System.Media.SoundPlayer 播本地 WAV。

C#
using System.Media;

using (SoundPlayer sp = new SoundPlayer(@"C:\Media\beep.wav"))
{
    sp.Play(); // 异步;同步用 PlaySync()
}
VB.NET
Imports System.Media

Using sp As New SoundPlayer("C:\Media\beep.wav")
    sp.Play() ' 异步;同步用 PlaySync()
End Using

注意事项

主题 说明
编解码 能否播取决于本机 Windows Media 组件与已装解码器,不是 .NET 保证的格式全集。
平台位数 COM 加载失败时优先核对 x86/x64 与「首选 32 位」等工程设置。
释放 窗体关闭时 stop / close,避免后台继续出声。
UI 线程 短本地文件一般可在按钮事件中直接 play;若自定义缓冲/网络流导致卡顿,再结合 异步、同步与多线程 处理。
C# 语言版本 LCode / .NET 4.8 按 C# 5.0:勿用 $"…"nameof?. 等。

相关阅读