程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 【插件式框架探索系列】使用多UI線程提升性能

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

編輯:關於.NET

了解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是為了保證在程序退出時自動回收該線程,否則會出現進程駐留問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved