我正在构建一个需要从互联网上下载RSS数据的Windows 8应用程序。
有一个等待它的GetFeedsAsync()方法,在我的应用程序的HomePage的(异步)LoadState方法中调用。
我选择将该任务委托给后台线程:
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;
执行命令。
答案 0 :(得分:2)
尝试将 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>