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

时间:2018-04-28 08:30:18

标签: c# .net winforms media

在我的应用程序中,通常应该有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();
}

1 个答案:

答案 0 :(得分:0)

如果您不将b'1b24'+struct.pack('!B', 0)+struct.pack('!B', 0) s的引用存储为字段,但仅在本地变量中存储,则可能会收集到gargabe。这可能会延迟,因为MediaPlayer使用的非托管资源在被释放之前需要MediaPlayer。要解决您的问题,请考虑在字段中存储对Dispose的引用。

MediaPlayer

然后调整您的方法以使用该字段。

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(); } 事件,以便将位置设置回到开头并重新开始播放。