WPF项目嵌入音频资源播放问题及原因咨询
WPF MediaPlayer嵌入音频报错原因解析
一、相对路径触发MediaFailed(资源找不到)的原因
- 文件未同步到输出目录:你将MP3标记为
Content类型,但如果该文件的「复制到输出目录」属性设置为「不复制」或「如果较新才复制」,编译后输出目录(如bin/Debug)里不会存在这个音频文件。而MediaPlayer的相对路径是基于程序运行时的当前工作目录(默认就是输出目录),自然找不到文件触发报错。 - 事件绑定时机错误:你的代码里先执行
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
相关产品推荐
相关产品推荐

