当歌曲正在准备时显示ProgressRing并在播放歌曲时隐藏它 - Windows phone 8

时间:2015-09-08 03:41:45

标签: windows-phone-8 mediaelement

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

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

2 个答案:

答案 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;
    }