详解WPF线程模型和Dispatcher

 

  • 这里将介绍WPF线程模型和Dispatcher,首先我们要了解WPF应用程序从两个线程开始:一个用于处理呈现,一个用于管理UI。希望能对大家有所帮助。
  • WPF线程模型是从WPF的两个线程:一个用于处理呈现和一个用于管理UI开始。并展开同时讨论Dispatcher的相关对象。

    开始着手写这个WPF系列,这里的一站式,就是力争在每一个点上能把它讲透,当然,做不到那么尽善尽美,如果有不对的地方也欢迎朋友们指正,我会逐步补充,争取把这个系列写好。

    通常,WPF应用程序从两个线程开始:一个用于处理呈现,一个用于管理UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。

    UI 线程对一个名为Dispatcher的对象内的工作项进行排队。Dispatcher基于优先级选择工作项,并运行每一个工作项,直到完成。每个 UI 线程都必须至少有一个Dispatcher,并且每个Dispatcher都只能在一个线程中执行工作项。

    这两段是MSDN上关于WPF线程模型的描述。主要介绍了两个概念:一,WPF中线程一分为二,一个用于呈现(Render),一个用于管理UI;二,在UI线程中,使用了一个名为Dispatcher的类帮助UI线程处理任务。

    那么这个线程模型和Dispatcher到底是怎样的呢,它又有什么特点,有什么优缺点呢?在正式分析线程模型和Dispatcher之前,我先找一个插入点,希望这个插入点能为朋友们所理解。

    作为一个Presentation的基架,WPF的使命就是要编写图形化的操作界面。而在Windows操作系统上,图形化界面是建立在消息机制这个基础上的,那么创建一个窗口,要经历哪些步骤呢?

    1. 创建窗口类。 WNDCLASSEX wcex; RegisterClassEx(&wcex);

    2. 创建窗口。CreateWindow(…); ShowWindow(…); UpdateWindow(…);

    3. 建立消息泵。  

      
      
       
         
         
         
         
    1. while (GetMessage(&msg, NULL, 0, 0))   
    2. {   
    3. TranslateMessage(&msg);   
    4. DispatchMessage(&msg);   
    5. }  

    打个比方,我们在一个自动化的厂房里生产设备。基于正规,我们会首先定义好该设备的模板,这就是创建窗口类,这里”类”更多表示类别的意思。模板定义完毕,我们可以正式生产设备了,这就是创建窗口,这个CreateWindow的时候会通过字符串来匹配到我们定义的模板(窗口类)。创建成功后,我们要让设备动起来,就要像人一样,体内一定要有类似于血液的流传机制,把命令传达到设备的各个部分,这就是消息泵,这个泵就像我们的心脏一样,源源不断的通过GetMessage并Dispatch来分发血液(消息)。既然我们通过消息来对设备下达指令&#

你可能感兴趣的:(wpf,ui,任务,windows,timer,input)