WPF的默认线程模型模式未STA线程,即单线程模型。同时只有一个前台线程,因此所有耗时的后台工作需要通过委托调用的方式进行。
Dispatcher类
WPF中的线程调度管理程序,本质是将通过委托放入的界面元素更新任务进行统一管理,可以使用静态的CurrentDispatcher类获取当前线程的调度程序。
使用方式如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
// 执行完成后再调用BeginInvoke
Thread.Sleep(10000);
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, (ThreadStart)delegate ()
{
// 不能在这里进行耗时业务操作,这里线程是前台的UI线程
this.btnModifyButton.IsEnabled = false;
this.lblBackGroudModfiy.Content = "后台修改的结果"+DateTime.Now.ToLongTimeString();
this.btnModifyButton.IsEnabled = true;
});
});
}
DispatcherObeject类
每个WPF元素都继承于该类,该类有如下方法,该类指定了每个WPF元素归属的线程
- Dispathcer类,返回管理该对象的线程调度程序
- CheckAcess,VerifyAccess