首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Windows窗体应用程序中的音乐突然停止播放

C# Windows窗体应用程序中的音乐突然停止播放
EN

Stack Overflow用户
提问于 2018-04-28 16:30:18
回答 1查看 335关注 0票数 0

在我的应用程序中,通常应该有两个重叠的声音(一首歌和一些短声音)。它工作得很好,直到有时歌曲突然停止播放。你知道我该怎么解决这个问题吗?下面是我用来添加歌曲和声音的函数:

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-28 22:46:49

如果您不存储对MediaPlayer字段的引用,而只是将其存储在局部变量中,则它们很可能会被大量收集。这可能会延迟发生,因为MediaPlayer使用需要Dispose才能释放的非托管资源。要解决您的问题,请考虑在字段中存储对MediaPlayer的引用。

代码语言:javascript
复制
private System.Windows.Media.MediaPlayer _music;
private System.Windows.Media.MediaPlayer _happy;
private System.Windows.Media.MediaPlayer _sad;

然后调整您的方法,改为使用该字段。

代码语言:javascript
复制
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事件,将位置设置回开头,然后重新开始播放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50074501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档