MediaPlayer C的线程问题#

时间:2016-08-17 15:39:12

标签: c# wpf multithreading error-handling

我正在创建一个具有<a class="btn" data-popup-open="popup-1" href="#">More Details</a> <div class="popup" data-popup="popup-1"> <div class="popup-inner"> <h2>Wow! This is Awesome! (Popup #1)</h2> <p>Per Serve : 5g Energy : 20kcal Protein : 0.0g Fat­Total : 0.0g Saturated &nbsp; 0.0g Carbohydrate : 0.0g Package Size : 1 x 24 x 350 g</p> <p><a data-popup-close="popup-1" href="#">Close</a></p> <a class="popup-close" data-popup-close="popup-1" href="#">x</a> </div> </div> <a class="btn" data-popup-open="popup-2" href="#">Quick inquiry</a> <div class="popup" data-popup="popup-2"> <div class="popup-inner"> <h2>This is the one that wont work(Popup #1)</h2> <p>Another data that wont appear</p> <p><a data-popup-close="popup-2" href="#">Close</a></p> <a class="popup-close" data-popup-close="popup-2" href="#">x</a> </div> </div> 多维数组的应用程序,其中包含自定义对象,当按下按钮时,需要播放特定于每个对象的声音。

我运行此方法加载声音,运行没有已知问题:

9x9

但是当我激活另一种播放声音的方法时:

   public void setSoundToPlay()
    {
        OpenFileDialog openFileDiag = new OpenFileDialog();
        if ((bool)openFileDiag.ShowDialog())
        {
            audio = new MediaPlayer();
            audio.Open(new System.Uri(openFileDiag.FileName));
        }

    }

我得到 public void buttonActivated() { audio.Play(); }

运行mediaplayer对象的对象嵌套在另一个对象中,就是这个问题。我尝试了解线程但没有取得进展。

在某些情况下,我还需要让所有声音能够立即播放。这是这项工作的最佳对象吗?

2 个答案:

答案 0 :(得分:1)

使用与媒体播放器元素关联的Dispatcher属性,如此

 public void buttonActivated()
 { 
   audio.Dispatcher.Invoke(() =>
            {
                audio.Play();
            });
 }

答案 1 :(得分:0)

要从其他方法访问此类设备,请使用

Application.Current.Dispatcher.BeginInvoke(new Action(() => objectName);