私は単純なレーサーアプリを作成するために xaml に従っています
<StackPanel>
<Slider x:Name="racerOne" Maximum="1000"/>
<Slider x:Name="racerTwo" Maximum="1000"/>
<Button Content="Start Race" Click="myButton_Click"/>
</StackPanel>
次のコードを使用します
private void myButton_Click(object sender, RoutedEventArgs e)
{
Task firstRacer = Task.Run(() => Race(racerOne));
Task secondRacer = Task.Run(() => Race(racerTwo));
}
private void Race(Slider racer)
{
int step = 0;
while (step < 1000)
{
step += new Random().Next(0, 10);
Dispatcher.BeginInvoke(new ThreadStart(() => racer.Value = step));
Thread.Sleep(new Random().Next(0, 300));
}
}
ほとんどの場合 (90% としましょう)、両方のスライダーが一緒に動いているように見えますが、デバッグでは、各スレッドが に対して異なる値を生成することがわかりますstep
。どうして?