You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF项目嵌入音频资源播放问题及原因咨询

WPF MediaPlayer嵌入音频报错原因解析

一、相对路径触发MediaFailed(资源找不到)的原因

  1. 文件未同步到输出目录:你将MP3标记为Content类型,但如果该文件的「复制到输出目录」属性设置为「不复制」或「如果较新才复制」,编译后输出目录(如bin/Debug)里不会存在这个音频文件。而MediaPlayer的相对路径是基于程序运行时的当前工作目录(默认就是输出目录),自然找不到文件触发报错。
  2. 事件绑定时机错误:你的代码里先执行Open()和Play(),再绑定MediaFailed事件,导致本次播放操作的异常无法被捕获。正确的顺序应该是先绑定事件,再执行播放相关操作。

二、使用pack URI出现System.NotSupportedException的原因

WPF的pack:// URI是框架专属的资源访问格式,但MediaPlayer本质是封装了Windows Media Player的COM组件,不支持识别pack URI。它仅能处理本地文件路径、网络URL,或者通过流的方式读取嵌入资源(需要将文件标记为Embedded Resource,再通过程序集反射读取流)。

你的原代码中事件绑定的顺序问题示例:

MediaPlayer player = new();

private void Button_Sound(object sender, RoutedEventArgs args)
{
    player.Open(new Uri("Assets/one_beep.mp3", UriKind.Relative));
    player.Play();
    // 问题:事件绑定在播放操作之后,无法捕获本次操作的异常
    player.MediaFailed += (o, args) =>
    {
        Debug.WriteLine(args.ErrorException);
    };
}

内容的提问来源于stack exchange,提问作者Nontoxicguy1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:42:45