c# - 音乐突然停止在 C# Windows 窗体应用程序中播放
问题描述
在我的应用程序中,通常应该有 2 个重叠的声音(一首歌和一些短的声音)。它工作正常,直到有时歌曲突然停止播放。你知道我该如何解决这个问题吗?以下是我用于添加歌曲和声音的功能:
private void musical()
{
var p1 = new System.Windows.Media.MediaPlayer();
p1.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\Avicii - The Nights (Lyrics HD).wav"));
p1.Play();
}
private void happy()
{
System.Threading.Thread.Sleep(500);
var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\happy.wav"));
p2.Play();
}
private void sad()
{
System.Threading.Thread.Sleep(500);
var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\sad.wav"));
p2.Play();
}
解决方案
如果您不将MediaPlayer
s 的引用存储为字段,而仅存储在局部变量中,则它们可能会被 gargabe 收集。这可能会延迟发生,因为MediaPlayer
使用需要Dispose
释放之前的非托管资源。要解决您的问题,请考虑MediaPlayer
在字段中存储对 s 的引用。
private System.Windows.Media.MediaPlayer _music;
private System.Windows.Media.MediaPlayer _happy;
private System.Windows.Media.MediaPlayer _sad;
然后调整您的方法以改用该字段。
private void musical()
{
_music = new System.Windows.Media.MediaPlayer();
_music.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\Avicii - The Nights (Lyrics HD).wav"));
_music.Play();
}
如果您想重复播放音频(效果不太好),您可以订阅该MediaEnded
事件,以便将位置设置回开头并重新开始播放。
推荐阅读
- java - 通过 Fluentd 将 Spring Boot 应用程序日志记录到 Elasticsearch
- android - 无法将 EditText 字段数据传递到 viewpager 中的 textviewfield
- r - 如何在数据集中添加插值 NA 值
- c# - System.ArgumentNullException:邮递员中的值不能为空
- c# - WPF MVVM 将图像源设置为空?
- python - 获取谷歌结果+结果描述
- javascript - 在useMemo中使用reducer时使用useState和useEffect错误更新状态不起作用
- python - 用户定义的异常处理后正确的一般异常处理
- tensorflow - 关于张量流 2.3.0-rc1
- java - 在我添加 throws ParseException 之后,仍然出现解析异常,为什么?