【插件式框架探索系列】使用多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是为了保证在程序退

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

原文地址:https://www.cnblogs.com/tianciliangen/p/8961610.html

时间: 2024-11-09 20:37:48

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

(C/C++)基于SharpUI控件库的插件式框架开发--第一篇简介

看到题目,很明显这里要说的是插件式框架的开发,当然是用c/c++来实现的.开发对于我来说,是一种爱好,但并非科班出身,所以这里要说的一点分享就是,开发并不是会写代码就行了,最主要的是要有思路想法,比如要实现一个功能,就要知道,这个功能到底是要来实现啥的,要实现它需要什么样的算法等等,做到胸中有丘壑,再去用最简单代码去实现它,就会发现写代码是一件很享受的事情. 参加工作快两年了,一开始的是用C#开发,写了半年多的功能和小控件,上手之后,参考ICSharpCode.Core.Presentation

插件式框架平台

二.插件式框架平台 以插件编程为指导思想,动态反射调用组件为行动方针,深入调研.设计.编码,初步形成现代化软件架构. 简介 有了理论指导,就需要用实践去验证.所谓知行合一. 作为一款通用插件式开发框架,基础的插件内核是整个平台的核心.鉴于平台的通用性和易用性,还插件式的提供以下常用基础模块功能: 1. 工作流组件 2. 权限系统组件 3. 自动更新组件 4. 自定义UI套件 5. 轻量级ORM 6. 字典管理 7. 通用类库 2.1 插件内核 本平台的插件内核开发借鉴了SD中服务和插件树思想,以

(C/C++)基于SharpUI控件库的插件式框架开发--第三篇框架基础服务库

一个框架基础的东西,一般也是操作的最基础的类,比如char.int.bool等,有时出现内存泄露的问题导致错误的抛出,但是C++开发有的时候就算是抛出异常,那也是靠经验来积累才能非常快速准确的找出错误所在,这就需要在框架中需要添加日志管理的接口,日志管理的好处就是开发者自身在找异常时提供参考,另一个就是如果用户操作时出现问题,也可将日志反馈,帮助快速解决问题:总之了为了更好的扩展完善我的框架,我详细列一下这个基础服务库(XPCore)包含内容: 虽说sharpui控件库内封闭好string类,但

(C/C++)基于SharpUI控件库的插件式框架开发--第二篇可停靠管理

一个软件,不可能只有一个文档界面,会有多个甚至几十二,比如一些浏览器.文档查看等都是多个标签页的形式,在C#中开源的可停靠管理的常用的是Xceed.Wpf.AvalonDock:但是用C/C++开发的开源停靠管理库是没找到,没办法只能自己写一个了. 图1 可停靠管理项目名XPDock,其中所有控件的样式存放在“.bin\layout\Theme\Controls\XPDock.xml”:如图2: 图2 在XPDock控件中,DockingManager为控件主要控件,控件内定义添加视图方法Add

Javascript之UI线程与性能优化

在浏览器中,Javascript执行与UI更新是发生在同一个进程(浏览器UI线程)中的.UI线程的工作基于一个简单的队列系统,任务会被保存到队列中直到进程空闲时被提取出来执行.所以Javascript的执行会阻塞UI更新;反之,UI更新也会阻塞Javascript的执行.给用户的表现就是浏览器在工作时短暂或长时间失去反应,用户的操作不能及时得到响应.而UI线程的阻塞很多时候是由于我们要在代码里进行长时间的脚本运算,超过了浏览器限制,导致浏览器失去响应,冻结用户界面. 所以,编码时对于耗时较长的运

基于Python3的漏洞检测工具 ( Python3 插件式框架 )

[TOC] Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based on Python3. 基于Python3的简单版漏洞检测框架 -- lance 可以自定义poc或exp插件,可以指定要加载的poc或exp. 代码已经上传到Github : https://github.com/b4zinga/lance screenshot requirements pyt

Python3漏洞扫描工具 ( Python3 插件式框架 )

目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents README Guide Change Log TODO list Any advice or sugggestions 目录结构 Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based on Python3. 基于Pyt

探讨插件式GIS框架的设计

三年前,听当时的师兄推荐,买了蒋波涛的一本关于GIS插件框架的书.当时一边看书一边将其中的例子完整的实现了一遍,收益匪浅.后来由于项目需要,也做过一个插件的C/S系统,用的是微软提供的MEF框架.在这个系统中,把蒋波涛在他的书中没有涉及到的插件和插件的通信完成了.不过,蒋波涛的那本书,涉及到了插件系统的很多底层内容,其中关于插件引擎的设计尤其值得学习.近来,我将自己当年实现的那个例子进行了一个总结,和大家一起分享. 1.插件式框架的组成 (1).框架分为宿主程序和插件对象两部分 (2).两部分交

企业信息化解决方案——插件式平台开发框架

0.三板斧 作为职业Programmer或是优秀Team,拥有一套成熟.稳定的开发框架,无疑是行走IT江湖.纵横IT市场的必备功底. 无图无真相,作为一个讲究实效的ITer,先来几道的甜点凉菜,后续会上更多的硬菜啦~o(∩_∩)o ~ 0.1 平台登录界面 0.1.平台登录界面 平台登录模块的设计兼顾了安全性和易用性.只有合法授权且状态正常的用户才能登录到平台.同时为方便用户使用,在确保电脑使用者相对唯一的情况下,可以选择保存登录信息,系统会自动对用户的相关登录信息采取加密手段后进行存储. 0.