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

方法二:

 

实得分

posted @ 2014-08-21 23:39  简道  阅读(1642)  评论(0编辑  收藏  举报