私はこのxamlを持っています
<Window x:Class="TestCloseWindow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="500" Height="400">
<StackPanel>
<TextBlock x:Name="Seconds"></TextBlock>
<Button Content="fasdfd" Click="ButtonBase_OnClick"></Button>
</StackPanel>
</Window>
そして、このコード
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
await CountToTen();
}
private Task CountToTen()
{
return Task.Factory.StartNew
(() =>
{
for (var i = 1; i <= 10; i++)
{
Seconds.Text = i.ToString(CultureInfo.InvariantCulture);
Task.Delay(1000).Wait();
}
}
, CancellationToken.None
, TaskCreationOptions.None
, TaskScheduler.FromCurrentSynchronizationContext()
);
}
}
このコードでは、バックグラウンド タスクから UI にアクセスするために TaskScheduler.FromCurrentSynchronizationContext() を使用します。
プログラムが 10 までカウントされる方法を確認できると思っていましたが、代わりに、UI が 10 秒間ブロックされ、10 秒後に TextBlock に表示されます。
どうすれば修正できますか?