2017-01-06 159 views
0

我有一个基本的Windows窗体应用程序使用System.Windows.Media.MediaPlayer来播放MP3文件。主窗体有一个按钮,可以打开第二个窗体。System.Windows.Media.MediaPlayer播放声音两次

Main Form

第二种形式具有单个按钮时播放的MP3文件的3秒。

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(); 
    } 

这防止了我以前看到的时候我会再打开第二个形式重复音播放行为。