WPF的默认线程模型模式未STA线程,即单线程模型。同时只有一个前台线程,因此所有耗时的后台工作需要通过委托调用的方式进行。

Dispatcher类

WPF中的线程调度管理程序,本质是将通过委托放入的界面元素更新任务进行统一管理,可以使用静态的CurrentDispatcher类获取当前线程的调度程序。
使用方式如下:

  1. private void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3. Task.Factory.StartNew(() =>
  4. {
  5. // 执行完成后再调用BeginInvoke
  6. Thread.Sleep(10000);
  7. this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, (ThreadStart)delegate ()
  8. {
  9. // 不能在这里进行耗时业务操作,这里线程是前台的UI线程
  10. this.btnModifyButton.IsEnabled = false;
  11. this.lblBackGroudModfiy.Content = "后台修改的结果"+DateTime.Now.ToLongTimeString();
  12. this.btnModifyButton.IsEnabled = true;
  13. });
  14. });
  15. }

DispatcherObeject类

每个WPF元素都继承于该类,该类有如下方法,该类指定了每个WPF元素归属的线程

  1. Dispathcer类,返回管理该对象的线程调度程序
  2. CheckAcess,VerifyAccess

WPF基础知识分享.pptx