了解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

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

  1. 【插件式框架探索系列】应用程序域(AppDomain)

    应用程序域(AppDomain)已经不是一个新名词了,只要熟悉.net的都知道它的存在,不过我们还是先一起来重新认识下应用程序域吧,究竟它是何方神圣. 应用程序域 众所周知,进程是代码执行和资源分配的 ...

  2. QT/C++插件式框架、利用智能指针管理内存空间的实现、动态加载动态库文件

    QT.C++插件式框架.主要原理还是 动态库的动态加载. dlopen()函数.下面为动态加载拿到Plugininstance对应指针.void**pp=(void**)dlsym(handle,&q ...

  3. Javascript之UI线程与性能优化

    在浏览器中,Javascript执行与UI更新是发生在同一个进程(浏览器UI线程)中的.UI线程的工作基于一个简单的队列系统,任务会被保存到队列中直到进程空闲时被提取出来执行.所以Javascript ...

  4. [热拔插] 轻量级Winform插件式框架

    写在前面的话 对于大神,Winform这种“古董玩具”,实在没太多“技术性”可言了,然而『好用才是王道』,本文不以技术为卖点,纯属经验之谈,欢迎交流拍砖 朴素版UI 开发初衷 由于本人所在公司不定时需 ...

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

    目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents README Guide Change Log TODO ...

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

    目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...

  7. asp.mvc 插件式框架

    参考文档: http://blog.csdn.net/bitfan/article/details/17260775 http://www.cnblogs.com/Mainz/archive/2012 ...

  8. (1)从底层设计,探讨插件式GIS框架的实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 研一时,听当时的师兄推荐,买了蒋波涛的一本关于GIS插件框架的书.当时 ...

  9. 美团客户端响应式框架EasyReact开源啦

    前言 EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题. 目前 EasyReact 已在美团和大众点评客户端的部分业务中进行了实践,并且持续 ...

随机推荐

  1. noi 7827 质数的和与积

    描述 两个质数的和是S,它们的积最大是多少? 输入一个不大于10000的正整数S,为两个质数的和.输出一个整数,为两个质数的最大乘积.数据保证有解.样例输入 50 样例输出 589 欧拉筛+尺取.实际 ...

  2. 在输出debug日志前加上logger.isDebugEnabled()判断的原因

    场景: String token = md5.substring(0, 10) + base64Two + md5.substring(10); if (logger.isDebugEnabled() ...

  3. Mac上搭建Python集成环境

    Jenkins安装 第一种方式下载安装包 官网 https://jenkins.io/download/ 下载安装包 第二种通过homebrew安装,前提需要安装jdk(推荐) brew instal ...

  4. Codeforces Round #604 (Div. 2) A. Beautiful String

    链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...

  5. ssh远程后台运行

    ssh hadoop8 "/export/server/storm/bin/storm nimbus >/export/server/storm/nimbus_start.log 2& ...

  6. 2019/10/22 test T1 题解

    题目描述 给定n个a[i],b[i],求min(x$\in$R){$\sum\limits_{i=1}^{n}$|a[i]*x+b[i]|} 输入格式 第 1行 1个整数 n第 2行 n个整数,第 i ...

  7. LOJ6071. 「2017 山东一轮集训 Day5」字符串 [SAM]

    LOJ 思路 这种计数题显然是要先把每一个合法的串用唯一的方法表示出来.(我连这都没想到真是无可救药了) 如何唯一?容易想到把前缀尽可能多地在第一个串填掉,然后填第二个,第三个-- 如何做到这样?可以 ...

  8. 安装php的oracle扩展

    PHP 版本5.5 Windows下 1.首先下载OCI8的扩展 http://pecl.php.net/package/o... 我这里下的版本是5.5 Thread Safe (TS) x86 版 ...

  9. linux shell下面的几种proxy方式

    设置ALL_PROXY环境变量 export ALL_PROXY=socks5://127.0.0.1:1080 支持socks5 http https 取消 export ALL_PROXY=&qu ...

  10. GO语言网络编程

    socket编程 Socket是BSD UNIX的进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.Socket可以理解为TCP/IP网络的API,它 ...