WPF动感编程(2) WPF体系结构
摘要: 了解WPF的体系结构是学习之旅的必经之路。这也是我为什么在第二篇文章就提出。本文主要探讨8个主要基类。它们分别是:线程分配系统、属性系统、可视化系统、UI系统、框架系统、形状系统、控件系统、面板系统。这篇文章略长,请耐心阅读。
WPF动感编程(2) WPF体系结构

品图:WPF体系结构图(黑色字体为抽象类,从上至下派生

  • 线程分配系统(System.Threading.DispatcherObject

    线程分配系统提供一个Dispatcher属性,VerifyAccessCheckAccess 方法。线程分配系统位于所有 WPF 类中顶端,几乎每一个 WPF 元素都派生于此类。在此之前,请先了解一下小知识。

    WPF 应用程序启动后,会有两条固定的线程,一条是用来处理呈现,一条用来管理 UI 。前者暂时不谈,后者UI线程才是重点。我不喜欢用太官方生硬的文字来描述一样东西。传统编程中,创建一个 Thread 是一个很麻烦的过程,其中要考虑到“线程安全”,如:一个主线程上的Label(线程 A 上的控件),创建一个线程(线程 B 的控件)执行一些操作后更新 Label 的文本,当执行到这一步时,系统就会告诉你,异常了!线程间操作无效。当然,解决方案也是有的。

    很显然,创建一个多线程是一个既麻烦又不安全的步骤。 WPF 为我们省略了很多事情,只要是派生于 System.Threading.DispatcherObject 对象的派生类,都会有一个 Dispatcher 属性,该属性可以安全地异/同步调用委托( p1 ),并且在线程中可以安全的访问其他控件。为什么 System.Threading.DispatcherObject 会排在顶端?原因就在此!当程序运行后, UI 线程对 Dispatcher 的对象内的工作项( p2 )进行排队。 Dispatcher 基于优先级选择工作项,并运行每一个工作项,直到完成所有工作项。每个 UI 线程至少都会有一个 Dispatcher ,并且每个 Dispatcher 只能在一个线程中执行工作项。所有的 UI 控件的每一个行为动作,都会发送至 UI 线程,这个线程依据发送过来的消息优先级进行排队,然后逐一处理。简单的讲:很无耻地将全部工作托付给一个人去做。

    P1:同步: DispatcherObject.Invoke,异步:DispatcherObject.BeginInvoke。区别:同步调用的线程将被阻塞,直到返回结果,而异步调用则直接开始。

    P2:所谓的工作项便是在窗体上的任何操作:如告诉 UI 线程,鼠标移入窗体了,鼠标单击 button1 了,鼠标右击等……

  • [依赖项]属性系统(System.Windows.DependencyObject

    不知读者是否具有HTML基础?如果没有,XML总有吧?在整个WPF中,最重要的地方,就是属性。MS的意思很简单,可以实现无任何代码的程序(动画)。也就是说,你可以不用码入任何.NET的代码,仅需XAML就可以实现许多特效。(有些地方甚至比代码更加精炼,神来之笔!)

    WPF 的一个核心原理:更具声明性且“以属性为核心”的编程模型。 依赖属性主要有两部分:依赖项属性、附加属性。若想探讨更高级的话题,请参阅《WPF的属性系统》。

  • [依赖项]属性系统(System.Windows.DependencyObject

    不知读者是否具有HTML基础?如果没有,XML总有吧?在整个WPF中,最重要的地方,就是属性。MS的意思很简单,可以实现无任何代码的程序(动画)。也就是说,你可以不用码入任何.NET的代码,仅需XAML就可以实现许多特效。(有些地方甚至比代码更加精炼,神来之笔!)

    WPF 的一个核心原理:更具声明性且“以属性为核心”的编程模型。 依赖属性主要有两部分:依赖项属性、附加属性。若想探讨更高级的话题,请参阅《WPF的属性系统》。

Aloner博客。
[依赖项]属性系统

不知读者是否具有HTML基础?如果没有,XML总有吧?在整个WPF中,最重要的地方,就是属性。MS的意思很简单,可以实现无任何代码的程序(动画)。也就是说,你可以不用码入任何.NET的代码,仅需XAML就可以实现许多特效。(有些地方甚至比代码更加精炼,神来之笔!)

不知读者是否具有HTML基础?如果没有,XML总有吧?在整个WPF中,最重要的地方,就是属性。MS的意思很简单,可以实现无任何代码的程序(动画)。也就是说,你可以不用码入任何.NET的代码,仅需XAML就可以实现许多特效。(有些地方甚至比代码更加精炼,神来之笔!)

不知读者是否具有HTML基础?如果没有,XML总有吧?在整个WPF中,最重要的地方,就是属性。MS的意思很简单,可以实现无任何代码的程序(动画)。也就是说,你可以不用码入任何.NET的代码,仅需XAML就可以实现许多特效。(有些地方甚至比代码更加精炼,神来之笔!)

相关文章:

  • 2022-12-23
  • 2021-10-29
  • 2022-12-23
  • 2021-08-10
  • 2022-02-14
  • 2021-06-03
  • 2022-01-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-01
  • 2021-10-24
  • 2021-09-07
  • 2021-08-08
  • 2021-04-16
相关资源
相似解决方案