私のプログラムでは、タイマーが0になったときにアプリをサービスに「接続」させ、「接続」中に進行状況リングを表示させるタイマーがあります。
プログレス リングがアクティブに設定されている機能が終了するまで、プログレス リングが「アクティブ」にならないように見えます。しかし、接続機能の完了を待っているため、進行状況リングが表示されません。
これを解決するためにさまざまな方法を試しましたが、これを機能させるための待機/タスク/ディスパッチに関する理解が不足しています。
ProgressRing と Connect 関数に関連するコードは次のとおりです。
vm.IsConnecting = true;
await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => vm.Connect());
if (vm.ConnectionClear)
this.Frame.Navigate(typeof(MainPage), vm);
vm.IsConnecting = false;
vm.IsConnecting は、ProgressRing の IsActive プロパティがバインドされているものです。
vm.IsConnecting が true に設定された直後に、progressRing を表示するにはどうすればよいですか?
私は WinRT をターゲットにしているため、ツールボックスは多少制限されていることに注意してください。
これの奇妙な点は、ボタン クリック用の EventHandler に上記とまったく同じコード ブロックがあり、それが本来あるべきだと思うように機能することです。つまり、ボタンがクリックされると、ProgressRing が表示され、プログラムが connect メソッドを実行し、完了すると ProgressRing が消えます。
private async void Connect_Clicked(object sender, RoutedEventArgs e)
{
vm.IsConnecting = true;
await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => vm.Connect());
if (vm.ConnectionClear)
this.Frame.Navigate(typeof(MainPage), vm);
vm.IsConnecting = false;
}