我正在构建一个需要从互联网下载 RSS 数据的 Windows 8 应用程序。
有一个等待的 GetFeedsAsync() 方法负责此操作,在我的应用程序主页的(异步)LoadState 方法中调用。
我选择将该任务委托(delegate)给后台线程:
await Task.Run(() => feedDataSource.GetFeedsAsync());
我只想显示一个 ProgressRing 并保持它处于事件状态,直到该过程完成并且下载的数据已准备好显示。
我在 XAML 中定义了 ProgressRing:
<ProgressRing x:Name="LoadingProgressRing" IsActive="True" Foreground="White" Margin="0,400,0,0" Width="80" Height="80" VerticalAlignment="Top" Canvas.ZIndex="1" />
然后在代码隐藏中添加这两行:
LoadingProgressRing.IsActive = true;
await Task.Run(() => feedDataSource.GetFeedsAsync());
LoadingProgressRing.IsActive = false;
当应用程序启动时,它会导航到主页,ProgressRing 会在其中显示 1 秒钟然后消失。数据下载在 20 秒后完成,然后正常显示。
为什么 ProgressRing 会这样?在
之前,我想不出有什么理由让它不活动LoadingProgressRing.IsActive = false;
命令被执行。
最佳答案
尝试将 Grid.Row="1" 添加到您的 ProgressRing 元素,即:-
<ProgressRing x:Name="LoadingProgressRing" IsActive="True" Foreground="White" Margin="0,400,0,0" Width="80" Height="80" VerticalAlignment="Top" Canvas.ZIndex="1" Grid.Row="1" />
编辑
为了澄清一点 - 我遇到了进度条出现一秒钟然后消失的确切问题,这与等待无关,而是因为我没有为进度条指定网格行我的页面。
我的页面有两行定义:
<Grid.RowDefinitions> <RowDefinition Height="140"/> <RowDefinition Height="*"/> </Grid.RowDefinitions>
关于c# - ProgressRing 变为非事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434124/