【问题标题】:Action executing only when stepping with debugger仅在使用调试器单步执行时执行的操作
【发布时间】:2013-11-15 06:06:09
【问题描述】:

使用 WP8 模拟器,我有媒体元素(在我的 XAML 文件的布局根目录内,因此该元素是运行时可视化树的一部分),我正在尝试以编程方式触发它从后面的代码中播放.

当我的应用后端中的某些内容需要播放声音时,我正在使用 Caliburn Micro EventAggregator 发送消息。在后面的视图代码中,我使用 IHandle 设置媒体元素的 Source 并触发 Play。

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

    MediaElem.Play();
}

当我触发消息事件时,没有声音播放。但是,如果我在MediaElem.Play() 上设置断点,当我越过它时,声音就会播放。

我不知道发生了什么,基本上我的代码只有在我使用调试器单步执行时才有效。我仍在 UI 线程上(甚至尝试显式使用 Dispatcher)。

欢迎任何想法。

【问题讨论】:

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


【解决方案1】:

如果它与调试器一起工作而不是在实际应用程序中,您几乎可以肯定这是一个时间问题。

就您而言,问题在于您在尝试播放之前没有等待声音加载。它可以在模拟器上运行,因为执行被暂停,给了足够的时间来加载声音。

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

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

【讨论】:

  • 您看对了,我试图在媒体文件加载之前播放它。我以为除非它已经加载,否则它不会播放。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多