Windows phone 8 准备歌曲时显示ProgressRing,播放歌曲时隐藏它-windows phone 8

Windows phone 8 准备歌曲时显示ProgressRing,播放歌曲时隐藏它-windows phone 8,windows-phone-8,mediaelement,Windows Phone 8,Mediaelement,我正在开发windows phone 8应用程序,使用MediaElement播放歌曲。 我希望在歌曲准备时显示ProgressRing,并在播放歌曲时隐藏它。我执行下面的代码,但不显示ProgressRing progressRing.IsActive = true; mediaElement.Source = new Uri(url, UriKind.Absolute); mediaElement.Play(); progressRing.IsActive = false; 您需要将控制权

我正在开发windows phone 8应用程序,使用MediaElement播放歌曲。 我希望在歌曲准备时显示ProgressRing,并在播放歌曲时隐藏它。我执行下面的代码,但不显示ProgressRing

progressRing.IsActive = true;
mediaElement.Source = new Uri(url, UriKind.Absolute);
mediaElement.Play();
progressRing.IsActive = false;

您需要将控制权让给UI线程,以便显示进度环。一种方便的方法是等待任务。延迟足够长的时间以确保UI可以刷新:

private async Task Play()
{
    progressRing.IsActive = true;

    await Task.Delay(15);

    mediaElement.Source = new Uri(url, UriKind.Absolute);
    mediaElement.Play();
    progressRing.IsActive = false;
}
请注意,必须确保将方法标记为异步

另一种方法是调用Dispatcher.BeginInvoke,这似乎违反直觉,似乎您已经在UI线程中,但它可以工作:

progressRing.IsActive = true;

Dispatcher.BeginInvoke(() =>
{
    mediaElement.Source = new Uri(url, UriKind.Absolute);
    mediaElement.Play();
    progressRing.IsActive = false;
});

MediaElement.MediaOpen事件在媒体加载完成时触发。 尝试将该事件添加到MediaElement,并将progressRing.IsActive语句移动到EventHandler方法

mediaElement1.MediaOpened += new   System.Windows.RoutedEventHandler(mediaElement1_MediaOpened);
progressRing.IsActive = true;
mediaElement1.Source = new Uri(url, UriKind.Absolute);
mediaElement1.Play();


private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e)
    {
    progressRing.IsActive = false;
    }