使用WP8模拟器,我有Media Element(在我的XAML文件的Layout Root中,所以元素是运行时可视化树的一部分),我正在尝试以编程方式触发它从后面的代码中播放
我正在使用Caliburn Micro EventAggregator在我应用程序后端的某些内容需要播放声音时发送消息。在视图后面的代码我使用IHandle来设置媒体元素的Source并触发Play。
public void Handle(ToneMessage message)
{
MediaElem.Source = message.ToneUri;
MediaElem.Play();
}
当我触发消息事件时,没有播放声音。但是,如果我在MediaElem.Play()
上放置一个断点,当我跳过它时,声音会播放。
我不知道发生了什么,基本上我的代码只有在我用调试器踩到它时才能工作。我仍然在UI线程上(甚至尝试使用Dispatcher明确地尝试)。
欢迎任何想法。
答案 0 :(得分:1)
如果它适用于调试器而不是实际应用程序,那么您几乎可以肯定它是一个时间问题。
在您的情况下,问题是您在尝试播放之前不等待加载声音。它在模拟器上工作,因为暂停执行,有足够的时间加载声音。
在设置源之前,订阅MediaElement的MediaOpened
事件。然后,在那种情况下,调用Play
方法播放声音。
或者,您可以将AutoPlay
属性设置为true
,以便在完成下载后自动播放声音。