我正在开发使用MediaElement播放歌曲的应用程序Windows Phone 8。 我希望在歌曲准备时显示ProgressRing并在播放歌曲时隐藏它。我在下面执行此代码,但没有显示ProgressRing !!
progressRing.IsActive = true;
mediaElement.Source = new Uri(url, UriKind.Absolute);
mediaElement.Play();
progressRing.IsActive = false;
答案 0 :(得分:0)
您需要控制UI线程以显示进度环。一种方便的方法是等待Task.Delay
(延迟时间足以确保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;
});
答案 1 :(得分:0)
MediaElement.MediaOpened媒体加载完成后会触发事件。 尝试将该事件添加到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;
}