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

Posted 天王星天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插件式框架探索系列使用多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

以上是关于插件式框架探索系列使用多UI线程提升性能的主要内容,如果未能解决你的问题,请参考以下文章

为何大部分的UI框架式单线程模型

Jetpack Compose 深入探索系列四: Compose UI

声明式 UI 编程探索-构建 SwiftUI 风格的 UI 框架 | GMTC

基于.NET6FreeSql若依UILayUIBootstrap构建插件式的CMS

怎么使用Web Workers提升性能?

Redis队列和swoole的多进程哪个好