c# - ProgressRing 变为非事件状态

标签 c# xaml windows-8 async-await

我正在构建一个需要从互联网下载 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/

相关文章:

c# - 如何在 Windows 应用商店应用程序中与 SQL 交互

c# - 使用 SDK 获取 Azure VM 的 IP

wpf - Visual Studio 2015 XAML 设计器因 WPF 崩溃

c# - 获取 GeometryModel3D 的名称

authentication - 有没有办法让 "remember me"复选框在 WinRT 应用程序的 Azure 移动服务身份验证上起作用?

c# - 如何判断 ListView 正在显示哪些项目?

c# - 自定义角色提供者 - DbContext 处置

c# - LINQ 排序匿名类型?

c# - 如何找到集合中的下一个最大键?

c# - C#添加Style后获取Button.Content | Xaml