只有在使用调试器步进时才执行操作

时间:2013-11-04 15:13:58

标签: c# .net windows-phone-8 mediaelement

使用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明确地尝试)。

欢迎任何想法。

1 个答案:

答案 0 :(得分:1)

如果它适用于调试器而不是实际应用程序,那么您几乎可以肯定它是一个时间问题。

在您的情况下,问题是您在尝试播放之前不等待加载声音。它在模拟器上工作,因为暂停执行,有足够的时间加载声音。

在设置源之前,订阅MediaElement的MediaOpened事件。然后,在那种情况下,调用Play方法播放声音。

或者,您可以将AutoPlay属性设置为true,以便在完成下载后自动播放声音。