1

我在 Visual Studio 2012 Ultimate 中开发了一个 Windows 8 应用程序,但我遇到了 MediaElement 问题,其中没有触发 MediaOpened 和 MediaEnded 事件。

下面是我的代码:

    public static async void PlaySound(string AudioFile, RoutedEventHandler PlayerEnded)
    {
        Uri audioUri = new Uri("ms-appx:///Assets/" + AudioFile);

        StorageFile audioStorage = await StorageFile.GetFileFromApplicationUriAsync(audioUri);

        if (audioStorage != null)
        {
            var stream = await audioStorage.OpenAsync(Windows.Storage.FileAccessMode.Read);

            MediaElement player = new MediaElement();

            player.AudioCategory = AudioCategory.GameEffects;

            player.AutoPlay = false;

            player.MediaEnded += PlayerEnded;

            player.MediaOpened += new RoutedEventHandler(delegate(Object sender, RoutedEventArgs e)
                {
                    player.Play();
                });

            player.SetSource(stream, audioStorage.ContentType);
        }
    }

基本上这将传递一个按钮单击声音文件,播放完成后将调用 this.Frame.Navigate 方法切换到另一个页面。但它不起作用,因为没有任何事件被触发。

如果我设置 AutoPlay = true 那么它可以正常播放,但是事件仍然不会被触发。

任何人都可以看到有什么问题吗?

谢谢你的帮助

4

1 回答 1

3

I think your MediaElement needs to be in the visual tree to fire. See http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/f5b9cdba-5521-467d-b838-8420afc68e7f/

于 2012-11-29T11:20:31.200 回答