2012-11-17 26 views
3

我正在构建一个需要从互联网下载RSS数据的Windows 8应用程序。ProgressRing变为不活动

有一个等待完成的GetFeedsAsync()方法负责这个,在我的应用的主页的(异步)LoadState方法中调用。

我选择了这项任务委托给后台线程:

await Task.Run(() => feedDataSource.GetFeedsAsync()); 

所有我想要的是显示ProgressRing并保持活动状态,直到过程完成和下载的数据是已经能够显示。

我所定义的ProgressRing在XAML:

<ProgressRing x:Name="LoadingProgressRing" IsActive="True" Foreground="White" Margin="0,400,0,0" Width="80" Height="80" VerticalAlignment="Top" Canvas.ZIndex="1" /> 

,然后加入这些2条线路中的代码隐藏:

LoadingProgressRing.IsActive = true; 
await Task.Run(() => feedDataSource.GetFeedsAsync()); 
LoadingProgressRing.IsActive = false; 

当应用程序启动时,它导航到主页,其中ProgressRing显示1秒钟然后消失。数据下载在20秒后结束,然后显示出来。

为什么ProgressRing的表现如此呢?我想不出有什么理由让它变为非活动状态,直到

LoadingProgressRing.IsActive = false; 

命令被执行。

+2

不确定'LoadingProgressRing',但你并不需要'Task.Run' - 只是'等待feedDataSource.GetFeedsAsync()'直接。 –

回答

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> 
+1

将控件添加到*** Grid.Row =“1”***后面的逻辑是什么? – Mayank

+0

@Mayank,我在页面上遇到了同样的问题(尽管有2行定义),这对我很有用。 – iandayman

+0

谢谢你iandayman! Grid.Row =“1”做了诡计;-) – Icarus