async/awaitについて、上記URLにもすごくシンプルな例を書いています。
ここでは、Task.Run()
中にXAMLのオブジェクトを変更する例です。
まず、「ProgressBar」「Button」「TextBox」を適当に配置します。
「ProgressBar」「TextBox」に名前をつけます。
型 | Name |
---|---|
ProgressBar | p1 |
TextBox | t1 |
<ProgressBar HorizontalAlignment="Stretch" Height="2" VerticalAlignment="Top" Margin="0,15,0,0" IsEnabled="False" IsIndeterminate="False" Name="p1"/> <Button Content="ボタン" HorizontalAlignment="Left" Margin="66,56,0,0" VerticalAlignment="Top" Height="62" Width="130" Click="Button_ClickAsync"/> <TextBox HorizontalAlignment="Left" Margin="66,144,0,0" Text="TextBox" VerticalAlignment="Top" Width="130" Height="74" Name="t1"/>
ボタンイベントのコード
ボタンが押されたときに、Task.Run()
を実行するコードを書きます。
private async void Button_ClickAsync(object sender, RoutedEventArgs e) { p1.IsEnabled = true; p1.IsIndeterminate = true; t1.Text = "5000数えた後時間表示"; await Task.Run(async () => { //何か重たい処理 for (int i = 0; i < 5000; ++i) { Debug.WriteLine("{0}", DateTime.Now); } // for のそこそこの処理が終わった後 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, () => { t1.Text = string.Format("{0}", DateTime.Now); //テキストボックスに書く p1.IsIndeterminate = false; //プログレスバーのアニメを止める p1.IsEnabled = false; }); }); }
Task.Run()
中に、await Dispatcher.RunAsync()
実行すると、XAML側を更新することができます。