WPFにおける非同期更新UI要素

3422 ワード

XAML
インタフェースは簡単で、ボタンが1つとlable要素が1つしかありません.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++を計算するためにブロックされているからである.
方法1:
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
方法2:
 
実得点