[英]Action executing only when stepping with debugger
使用WP8仿真器,我有了Media元素(在我的XAML文件的Layout Root里面,因此该元素在运行时是视觉树的一部分),并且我试图以编程方式触发它从后面的代码中播放。
当我的应用后端需要播放声音时,我正在使用Caliburn Micro EventAggregator发送消息。 在后面的视图代码中,我使用IHandle设置媒体元素的Source并触发Play。
public void Handle(ToneMessage message)
{
MediaElem.Source = message.ToneUri;
MediaElem.Play();
}
当我触发消息事件时,没有声音播放。 但是,如果我在MediaElem.Play()
上放置一个断点,则当我越过它时,声音会播放。
我不知道发生了什么,基本上我的代码只有在使用调试器进行调试时才有效。 我仍然在UI线程上(甚至使用Dispatcher进行了明确尝试)。
任何想法都欢迎。
如果它与调试器一起使用,而不是在实际应用程序中使用,则几乎可以肯定这是一个时序问题。
就您而言,问题在于您在尝试播放声音之前没有等待声音加载。 它可以在模拟器上运行,因为执行被暂停了,从而有足够的时间来加载声音。
在设置源之前,请订阅MediaElement的MediaOpened
事件。 然后,在这种情况下,调用Play
方法播放声音。
或者,可以将AutoPlay
属性设置为true
以在完成下载后自动播放声音。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.