代码之家  ›  专栏  ›  技术社区  ›  A.ALMUSBAHI

获取新的动态创建的MediaPlayer实例的引用

  •  -1
  • A.ALMUSBAHI  · 技术社区  · 7 年前

    我正在尝试创建一个 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 回复  |  直到 7 年前
        1
  •  1
  •   Sunil evesnight    7 年前

    调用方法后只需返回实例:

    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对象中,以便于操作。

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