WPFにおける非同期更新UI要素
3422 ワード
XAML
インタフェースは簡単で、ボタンが1つとlable要素が1つしかありません.buttonをクリックすると、lableの内容は0から自動的に増加します.
C#
上のコードが実行されると、ボタンをクリックしても見えません.Lableでは数字が増加しますが、少し待ってから99999が直接現れます.なぜなら、UIスレッドがループi++を計算するためにブロックされているからである.
方法1:
リファレンスhttp://msdn.microsoft.com/zh-cn/library/ms741870.aspx
方法2:
実得点
インタフェースは簡単で、ボタンが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:
実得点