WPF中异步更新UI元素
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>
C#
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); } }
参考 http://msdn.microsoft.com/zh-cn/library/ms741870.aspx
方法二:
实得分
识微见远 格物致知