WPFWindows表示层发展至用声明式语言进行开发并且融入大量动画和特效使得Win32极难做富客户端应用能WPF信手拈来同时用矢量图取代位图引入路由事件(RoutedEvent)对元素树进行多层监听通过依赖属性(DependencyProperty)动态变更控件树等WinForm程序开发时旦涉及多线程操作我们般能没有见过InvalidOperationException异常异常出现多数情况由于worker线程(子线程)修改主线程控件(或对象)属性而导致非法操作当种做法也非每次都会失败主要取决于子线程想要操作对象线程安全
WinForm控件提供了InvokeRequired属性来判断当前线程创建此控件线程旦控件创建完成InvokeRequired效率会错且也能保证安全过若目标控件尚未被创建(此时虽C#对象已经存过其底层窗口句柄仍旧null)InvokeRequired则能会耗费比较长时间(会从下至上遍历整控件树直找承载此控件且已经实例化并被创建了父控件种做法保证子控件会与父控件同线程上创建找合适父控件之框架即执行同样检查比较当前线程ID和创建该父控件线程ID)若框架无法找任何已创建父窗体则需要找些其类型窗体若层次体系无法找用窗体框架开始寻找暂存窗体(parking window)暂存窗体让会被某些Win32 API奇怪行所干扰简而言之有些对窗体修改(例修改某些样式)需要销毁并重新创建该窗体暂存窗体用来父窗体被销毁并重新创建过程用来临时保存其控件段时间内UI线程仅运行于暂存窗体
通常WPF 应用程序从两线程开始:用于处理呈现用于管理 UI呈现线程有效地隐藏台运行而 UI 线程则接收输入、处理事件、绘制屏幕及运行应用程序代码
WPFWindows Presentation Foundation缩写 其原来代号Avalon因我佩服拼音首字母组合样国内有人调侃地称之我佩服WPF微软新代图形系统运行.NET Framework 3.0架构下用户界面、2D/3D 图形、文档和媒体提供了统描述和操作方法基于DirectX 9/10技术WPF仅带来了前所未有3D界面而且其图形向量渲染引擎也大大改进了传统2D界面比Vista半透明效窗体等都得益于WPF 程序员WPF帮助下要开发出媲美Mac程序酷炫界面已再遥及奢望 WPF相对于Windows客户端开发来说向前跨出了巨大步提供了超丰富.NET UI 框架集成了矢量图形丰富流动文字支持flow text support3D视觉效和强大无比控件模型框架 |