【问题标题】:System.Windows.Media.MediaPlayer playing sound twiceSystem.Windows.Media.MediaPlayer 播放声音两次
【发布时间】:2017-05-21 17:52:08
【问题描述】:

我有一个基本的 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();
    }

}

【问题讨论】:

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


    【解决方案1】:

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

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

    这可以防止我之前在重新打开第二个表单时看到的重复音调播放行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多