3

インターネットから 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" />

そして、コード ビハインドに次の 2 行を追加しました。

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

アプリが起動されると、ProgressRing が 1 秒間表示されてから消える HomePage に移動します。データのダウンロードは 20 秒後に終了し、正常に表示されます。

ProgressRing がこのように動作するのはなぜですか? まで非アクティブになる理由は考えられません

LoadingProgressRing.IsActive = false;

コマンドが実行されます。

4

1 に答える 1

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"  />

編集

もう少し明確にするために、プログレスバーが一瞬表示されて消えるという正確な問題が発生していましたが、それは待機とは関係ありませんでしたが、ページのプログレスバーのグリッド行を指定していなかったためです。

私のページには2つの行定義がありました:

    <Grid.RowDefinitions>
        <RowDefinition Height="140"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
于 2012-11-17T20:34:54.093 に答える