0

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

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

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

    MediaElem.Play();
}

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

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

欢迎任何想法。

4

1 回答 1

1

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

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

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

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

于 2013-11-04T16:33:42.447 回答