C# 应用程序运行时未显示ProgressRing

C# 应用程序运行时未显示ProgressRing,c#,xaml,windows-phone-8.1,C#,Xaml,Windows Phone 8.1,我正在为Windows 8.1和Windows Phone 8.1开发一个“通用应用程序” 我需要在我的页面中添加一个ProgressRing控件,因为有一项任务需要一些时间才能完成,我应该通知用户应用程序正在加载数据。因此,我遵循了以下链接中有关MDSN的说明: 他们说了我到底需要什么: 4。添加不确定的进度环 当你无法估计完成一项任务还有多少工作量时 任务不阻止用户交互,请使用不确定的进度环。 一个不确定的进度环显示一个点的动画序列 做圆周运动 问题是当我插入prog.IsActive=t

我正在为Windows 8.1和Windows Phone 8.1开发一个“通用应用程序”

我需要在我的页面中添加一个
ProgressRing
控件,因为有一项任务需要一些时间才能完成,我应该通知用户应用程序正在加载数据。因此,我遵循了以下链接中有关MDSN的说明:

他们说了我到底需要什么:

4。添加不确定的进度环

当你无法估计完成一项任务还有多少工作量时 任务不阻止用户交互,请使用不确定的进度环。 一个不确定的进度环显示一个点的动画序列 做圆周运动

问题是当我插入
prog.IsActive=true时,
ProgressRing
没有播放“加载”的动画在启动任务的代码之前

如果我对代码的任务行进行注释,它将播放

XAML:

 <ProgressRing x:Name="prog" Margin="435,349,388,181" FontFamily="{StaticResource FontFamily6}" FontSize="25" />
注意:运行的任务使用
字典
Windows.Storage.ApplicationData
,以及
导航
,最后用于另一个页面。

代码中的缺陷(除非它可能几乎是即时的,如notes@kennyzx),您需要使用
LevelTap
方法返回以更新UI。当方法返回时,您已经将
ProgressRing.IsActive
属性设置回false,这意味着根本不显示任何内容

解决此问题的一个简单方法是使用async
Task.Yield
方法为UI线程提供运行的机会:

private async void LevelTap(object sender, TappedRoutedEventArgs e)
{
    prog.IsActive = true;

    await Task.Yield();

    CheckNav(sender);
}
但几乎什么也不会显示,因为您的代码执行时间不会太长。如果确实要强制指示器显示0.5秒,可以执行以下操作:

private async void LevelTap(object sender, TappedRoutedEventArgs e)
{
    prog.IsActive = true;

    await Task.Delay(500);

    CheckNav(sender);
}
您的代码中的缺陷(除了它可能几乎是即时的,如notes@kennyzx)是您需要
LevelTap
方法返回以更新UI。当方法返回时,您已经将
ProgressRing.IsActive
属性设置回false,这意味着根本不显示任何内容

解决此问题的一个简单方法是使用async
Task.Yield
方法为UI线程提供运行的机会:

private async void LevelTap(object sender, TappedRoutedEventArgs e)
{
    prog.IsActive = true;

    await Task.Yield();

    CheckNav(sender);
}
但几乎什么也不会显示,因为您的代码执行时间不会太长。如果确实要强制指示器显示0.5秒,可以执行以下操作:

private async void LevelTap(object sender, TappedRoutedEventArgs e)
{
    prog.IsActive = true;

    await Task.Delay(500);

    CheckNav(sender);
}

如果不确定模式始终打开,您也可以在每个函数中使用此代码块:

  #region Progress Ring Start
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Waiter.Visibility = Visibility.Visible; // Progress ring name is Waiter.
            });

            #endregion
            await Task.Delay(1000);
            CheckNav(sender); // Your process



            #region Progress Ring Finish
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Waiter.Visibility = Visibility.Collapsed; // Progress ring name is Waiter.

            });
            #endregion

如果不确定模式始终打开,您也可以在每个函数中使用此代码块:

  #region Progress Ring Start
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Waiter.Visibility = Visibility.Visible; // Progress ring name is Waiter.
            });

            #endregion
            await Task.Delay(1000);
            CheckNav(sender); // Your process



            #region Progress Ring Finish
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Waiter.Visibility = Visibility.Collapsed; // Progress ring name is Waiter.

            });
            #endregion


嗯,让我猜猜,
GameSetter game=newgamesetter()
需要花费大量的时间,对吗?@kennyzx不完全正确,构造函数实际上什么都不做,它只有3个属性。因此,在启动进度环后,您可以通过设置
prog.IsActive=false立即停止它-因为似乎没有耗时的步骤。@kennyzx我想出了一个主意,实现一个计时器,在
进程开始时启动,0.5秒后它将启动任务,这就成功了,但仍然不是我喜欢的编码方式。好的,应该可以了,至少在半秒钟内可以看到ProgressRing。但是首先检查代码的性能,使用
秒表计算每行需要多少时间。如果游戏加载不是很慢,你不需要这个
progressing
。嗯,让我猜猜,
GameSetter game=new GameSetter()
需要花费大量的时间,对吗?@kennyzx不完全正确,构造函数实际上什么都不做,它只有3个属性。因此,在启动进度环后,您可以通过设置
prog.IsActive=false立即停止它-因为似乎没有耗时的步骤。@kennyzx我想出了一个主意,实现一个计时器,在
进程开始时启动,0.5秒后它将启动任务,这就成功了,但仍然不是我喜欢的编码方式。好的,应该可以了,至少在半秒钟内可以看到ProgressRing。但是首先检查代码的性能,使用
秒表计算每行需要多少时间。如果游戏加载不是很慢,你不需要让这个
进行
。你们两个不明白我想说什么,0.5秒是应用程序等待的时间,因此它可以启动任务,所以需要0.5秒+任务时间=(大约3秒),我认为对这种情况进行
progressing
是合理的period@GabourX我懂了。那么,
Task.Yield
是否解决了您的问题?在我的uwp应用程序中,在桌面上运行得非常好,但在移动设备中,显示的不是铃声,而是空白页。@ravikumar这似乎是另一个问题,您应该发布一个新问题您俩不明白我想说什么,0.5秒是应用程序等待以启动任务的时间量,因此需要0.5秒+任务时间=(大约3秒),我认为对这样的任务进行
progressing
是合理的period@GabourX我懂了。那么,
Task.Yield
是否解决了您的问题?在我的uwp应用程序中,它在桌面上运行得非常好,但在移动设备中,显示的不是铃声,而是空白页。@ravikumar这似乎是另一个问题,您应该发布一个新问题