2017-01-06 14 views
0

У меня есть базовое приложение Windows Forms, которое использует System.Windows.Media.MediaPlayer для воспроизведения MP3-файла. В основной форме есть одна кнопка, которая открывает вторую форму.System.Windows.Media.MediaPlayer играет звук дважды

Main Form

Вторая форма имеет одну кнопку, которая играет 3 секунды MP3-файла.

Second Form

Все работает правильно в первый раз, когда я открываю вторую форму и нажмите кнопку воспроизведения. Но если я закрываю вторую форму, а затем снова ее открываю, воспроизведение MP3 ведет себя беспорядочно. Обычно он воспроизводит звук дважды. Иногда он воспроизводит звук после нескольких секунд задержки.

Как видно из скриншотов, я запускаю приложение в Windows XP. Я также попробовал запустить его на компьютере с Windows 10, и там проблема не возникает. Любая помощь в выявлении причины такого поведения была бы весьма признательна.

Вот код для второй формы, который играет MP3-файл:

public partial class SecondForm : Form 
{ 
    public SecondForm() 
    { 
     InitializeComponent(); 
    } 

    private string _tone = Path.Combine("Resources", "beep-17.mp3"); 
    private int _toneDuration = 3000; 

    System.Windows.Media.MediaPlayer _mediaPlayer = new System.Windows.Media.MediaPlayer(); 

    private void PlayMP3Form_Load(object sender, EventArgs e) 
    { 
     string mp3Path = Path.GetFullPath(_tone); 
     Uri mp3File = new Uri(mp3Path); 

     _mediaPlayer.Open(new Uri(mp3File.AbsoluteUri)); 
    } 

    private void buttonPlay_Click(object sender, EventArgs e) 
    { 
     _mediaPlayer.Position = TimeSpan.FromMilliseconds(_mediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds - _toneDuration); 
     _mediaPlayer.Play(); 
    } 

} 

ответ

0

В случае, если кто-то работает в этом же номере, я нашел решение, которое, кажется, работает для меня. Я добавил вызов, чтобы закрыть объект MediaPlayer, когда вторая форма замкнута:

private void SecondForm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     _mediaPlayer.Close(); 
    } 

Это предотвращает дубликат поведение воспроизведения тона, который я видел ранее, когда я вновь открыть вторую форму.