2013-11-04 81 views
0

使用WP8仿真器時,我有媒體元素(在我的XAML文件的佈局根目錄中,因此元素是運行時的可視化樹的一部分),並且我嘗試以編程方式觸發它從後面的代碼播放。僅在使用調試器步進時執行的動作

我正在使用Caliburn Micro EventAggregator在我的應用程序後端中的某些內容需要播放聲音時發送消息。在後面的代碼中,我使用IHandle來設置媒體元素的源和觸發器。

public void Handle(ToneMessage message) 
{ 
    MediaElem.Source = message.ToneUri; 

    MediaElem.Play(); 
} 

當我觸發消息事件時,沒有聲音播放。但是,如果我在MediaElem.Play()上放置斷點,當我跨過它時,聲音播放。

我不知道發生了什麼,基本上我的代碼只在我用調試器進行調試時才起作用。我仍然在UI線程上(甚至嘗試明確使用Dispatcher)。

歡迎任何想法。

+1

也許這可以幫助:http://stackoverflow.com/questions/10984038/unable-to-play-sound-in-windows-8 –

+0

感謝您的評論,在鏈接有提及使用MediaOpened,它似乎這是正確的選擇。 – drl

回答

1

如果它可以與調試器一起使用,而不是在實際的應用程序中,那麼您幾乎可以肯定這是一個計時問題。

在你的情況下,問題是你沒有等待聲音加載之前嘗試播放它。它在仿真器上工作,因爲執行已暫停,給予足夠的時間來加載聲音。

在設置源之前,請訂閱MediaElement的MediaOpened事件。然後,在這種情況下,請撥打Play方法播放聲音。

或者,您可以將AutoPlay屬性設置爲true,以便在完成下載後自動播放聲音。

+0

您當時在試圖在加載之前播放媒體文件。我想不知怎麼它不會玩,除非它已經加載。 – drl

相關問題