获取新动态创建的MediaPlayer实例的参考

时间:2018-01-10 08:50:59

标签: c# winforms audio media-player

我正在尝试创建一个动态创建按钮数量的C#应用,每个按钮都有Click_Handler,如果点击则会根据用户之前指定的文件播放声音。

使用这个简单的功能

,每个东西都在工作,所有的声音同时播放
private void playSound (string path)
{
 if (System.IO.File.Exists(path))
            {
                System.Windows.Media.MediaPlayer mp = new System.Windows.Media.MediaPlayer();
                mp.Open(new System.Uri(path));
                mp.Play();
            }
    }

现在每次用户点击任何按钮时,它都会使用MediaPlayer对象的新实例开始播放声音

我的问题是如何获取对每个新创建的MediaPlayer对象的引用,以便我可以操作它(停止,暂停,时间线......等)

1 个答案:

答案 0 :(得分:1)

调用方法后返回实例:

private System.Windows.Media.MediaPlayer playSound (string path)
{
    if (System.IO.File.Exists(path))
    {
       System.Windows.Media.MediaPlayer mp = new System.Windows.Media.MediaPlayer();
       mp.Open(new System.Uri(path));
       mp.Play();

       return mp;
    }
    return null;
}

在您的调用代码中,在使用之前检查返回的对象是否为null:

var mp = playSound(@"d:\music\file.mp3");
if(mp != null)
{
   //do something with mp
}

您还可以将此MediaPlayer对象保存在字典对象中,以便于操作。

Dictionary<string, System.Windows.Media.MediaPlayer> players = new Dictionary<string, System.Windows.Media.MediaPlayer>();
var mp = playSound(@"d:\music\file.mp3");
players.Add(btn.Text, mp); //Identifying media player by button text
// Later if a user press the button again and your default action is pause
if(players.ContainsKey(btn.Text))
   players[btn.Text].Pause();