Windows phone 8 准备歌曲时显示ProgressRing,播放歌曲时隐藏它-windows phone 8
我正在开发windows phone 8应用程序,使用MediaElement播放歌曲。 我希望在歌曲准备时显示ProgressRing,并在播放歌曲时隐藏它。我执行下面的代码,但不显示ProgressRingWindows 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; 您需要将控制权
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;
}