System.Windows.Media.MediaPlayer播放声音两次

时间:2017-01-06 21:29:38

标签: c# winforms windows-xp windows-media-player

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

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

}

1 个答案:

答案 0 :(得分:0)

如果其他人遇到同样的问题,我找到了一个似乎对我有用的解决方案。我在第二个表单关闭时添加了一个关闭MediaPlayer对象的调用:

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

这可以防止重新打开第二种形式时我之前看到的重复音调播放行为。