public abstract class DispatcherObject
{
protected DispatcherObject();
public Dispatcher Dispatcher { get; }
public bool CheckAccess();
public void VerifyAccess();
}
WPF中使用Dispatcher更新界面
xaml
<Grid>
<TextBlock x:Name="tbkShow" HorizontalAlignment="Center" Margin="0,120,0,0" VerticalAlignment="Top"/>
<Button x:Name="btnLogin" Click="btnLogin_Click" Content="登录" Margin="0,88,0,0" VerticalAlignment="Top" Width="75" Height="23"/>
</Grid>
C#
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(Login);
thread.Start();
}
private void Login()
{
for (int i = 0; i < 30; i++)
{
Thread.Sleep(100);
this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate {
btnLogin.Content = i + "s";
if (i == 29)
btnLogin.IsEnabled = true;
});
}
}
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
Task.Run(() =>
{
Dispatcher.Invoke(() =>
{
btnLogin.Content = "点击登录后";
});
});
}
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
Task.Delay(100).Wait();
Dispatcher.Invoke(() =>
{
btnLogin.Content = "登录成功";
});
});
}