XAML
界面很简单,只有一个按钮和一个 Lable 元素,实现点击 button 时,lable 的内容从 0 开始自动递增。
<Grid>
<Label Name="lable_plus" Content="0" />
<Button Content="Button" Click="button_Click" Height="23" Name="button" Width="75" />
</Grid>
Code
private void button_Click(object sender, RoutedEventArgs e){
for (int i = 0; i < 100000; i++) {
lable_plus.Content = i;
}
}
上面的代码执行后会发现,点击按钮并不会看到;lable中数字递增,而是稍等片刻后,直接出现99999。原因在于UI线程被阻塞用以计算循环 i++ 了。
方案
private void te_Click(object sender, RoutedEventArgs e){
update();
}
public delegate void PlusNumberDelegate(int i);
private void update(){
for (int i = 0; i < 100000; i++){
this.lable_plus.Dispatcher.BeginInvoke( DispatcherPriority.SystemIdle, new NextNumber(this.plus),i)
}
}