当前位置: 首页 > news >正文

【插件式框架探索系列】使用多UI线程提升性能

了解WPF线程模型的都知道,UI线程负责呈现和管理UI,而UI元素(派生自

DispatcherObject)只能由创建该元素的线程来访问,这就导致了一些耗时的UI操作将影

响到整个应用程序性能,未响应及漫长的等待有时会令人抓狂,而UI线程一度成为了不可

越逾的鸿沟。
对于框架来说,一个插件的行为不应该影响到其它插件及整个平台的稳定性,后来在看了

《Running WPF Application with Multiple UI Threads》和《DispatcherObject与WPF线

程模型》两篇文章后,思维一下子就打开了,前一篇讲的是在WPF应用程序中使用多个UI线

程,如果每个独立的插件都处于不同的UI线程,自然性能会有所提升,而后一篇则深入的

分析了win32的消息循环和wpf的线程模型,非常透彻。
下面是创建新UI线程的方法

Thread thread = new  Thread(() =>
{
     Window win = new  Window { Title = string .Format( "Thread id:{0}" , Thread.CurrentThread.ManagedThreadId) };
     win.Show();
     Dispatcher.Run();
});
thread.IsBackground = true ;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

如此Window将会在新的线程中运行,Dispatcher.Run()使当前线程进入消息循环,而设置线程的IsBackground为True是为了保证在程序退

出时自动回收该线程,否则会出现进程驻留问题。

谨以此记录成长的脚步,同时和大家一起分享快乐。
 
 
http://www.cnblogs.com/huihui0630/archive/2010/06/23/1763962.html

相关文章:

  • SQL事务回滚的问题及其解决的方法
  • 解决Fedora没有最大化最小化按钮
  • scala Option,None和Some
  • 安装 mysql 数据库, 并做 主 从(一)
  • 《汇编语言第二版——王爽》实验五,5、6题
  • Java面向对象编程
  • elasticsearch无故关闭,Log无报错
  • Java消息中间件入门笔记 - ActiveMQ篇
  • 下载的面试题
  • 创建React App, 完成TodoList版HelloWorld
  • bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
  • 测试策略和测试计划的区别?
  • 美国某实验室承认使用量子网络已经两年多
  • 【剑指offer】左旋转字符串,C+实现
  • vector中如何按条件删除元素
  • ES6指北【2】—— 箭头函数
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • angular学习第一篇-----环境搭建
  • CSS实用技巧
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java多线程
  • js学习笔记
  • node 版本过低
  • tweak 支持第三方库
  • 百度地图API标注+时间轴组件
  • 初识 beanstalkd
  • 第2章 网络文档
  • 技术发展面试
  • 前言-如何学习区块链
  • 学习笔记TF060:图像语音结合,看图说话
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #NOIP 2014#Day.2 T3 解方程
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (3)(3.5) 遥测无线电区域条例
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)jdk与jre的区别
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET BackgroundWorker
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core使用ef 6
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net操作Excel出错解决
  • 。Net下Windows服务程序开发疑惑
  • [8-27]正则表达式、扩展表达式以及相关实战