Музыка внезапно перестает играть в приложении C # Windows Form - PullRequest
0 голосов
/ 28 апреля 2018

В моем приложении должно быть 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 голосов
/ 28 апреля 2018

Если вы не сохраняете ссылку на MediaPlayer s как поле, а только в локальных переменных, они, вероятно, будут собираться сборщиком мусора. Это может произойти с задержкой, поскольку 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, чтобы вернуть позицию в начало и начать воспроизведение снова.

...