WPF將Windows表示層發展至用宣告式語言進行開發,並且融入大量的動畫和特效,使得在Win32中極難做到的富客戶端應用能在WPF中信手拈來,同時用向量圖取代點陣圖,引入路由事件(RoutedEvent)對元素樹進行多層監聽,透過依賴屬性(DependencyProperty)動態變更控制元件樹等。在WinForm程式開發時,一旦涉及多執行緒操作,我們一般不可能沒有見過InvalidOperationException這個異常。這個異常的出現多數情況是由於worker執行緒(子執行緒)修改主執行緒控制元件(或物件)的屬性而導致的非法操作,當然這種做法也非每次都會失敗,這主要取決於子執行緒想要操作的物件是不是執行緒安全的。 WinForm控制元件提供了InvokeRequired屬性來判斷當前執行緒是不是建立此控制元件的執行緒。一旦控制元件建立完成,那麼InvokeRequired的效率將會不錯,且也能保證安全。不過若是目標控制元件尚未被建立(此時,雖然C#物件已經存在,不過其底層的視窗控制代碼仍舊為null),那麼InvokeRequired則可能會耗費比較長的時間。(它會從下至上遍歷整個控制元件樹,直到找到一個可以承載此控制元件且已經例項化並被建立了的父控制元件,這種做法可以保證子控制元件將會與父控制元件在同一個執行緒上建立。找到合適的父控制元件之後,框架即可執行同樣的檢查,比較當前執行緒的ID和建立該父控制元件的執行緒的ID。)。若是框架無法找到任何一個已建立的父窗體,那麼則需要找到一些其他型別的窗體。若在層次體系中無法找到可用的窗體,那麼框架將開始尋找暫存窗體(parking window),暫存窗體讓你不會被某些Win32 API奇怪的行為所幹擾。簡而言之,有些對窗體的修改(例如修改某些樣式)需要銷燬並重新建立該窗體。暫存窗體就是用來在父窗體被銷燬並重新建立的過程中用來臨時儲存其中的控制元件的。在這段時間內,UI執行緒僅運行於暫存窗體中。 通常,WPF 應用程式從兩個執行緒開始:一個用於處理呈現,一個用於管理 UI。呈現執行緒有效地隱藏在後臺執行,而 UI 執行緒則接收輸入、處理事件、繪製螢幕以及執行應用程式程式碼。 WPF為Windows Presentation Foundation的縮寫 ,其原來代號為“Avalon”,因“我佩服”拼音首字母組合一樣,國內有人調侃地稱之為“我佩服”。WPF是微軟新一代圖形系統,執行在.NET Framework 3.0架構下,為使用者介面、2D/3D 圖形、文件和媒體提供了統一的描述和操作方法。基於DirectX 9/10技術的WPF不僅帶來了前所未有的3D介面,而且其圖形向量渲染引擎也大大改進了傳統的2D介面,比如Vista中的半透明效果的窗體等都得益於WPF。 程式設計師在WPF的幫助下,要開發出媲美Mac程式的酷炫介面已不再是遙不可及的奢望。 WPF相對於Windows客戶端的開發來說,向前跨出了巨大的一步,它提供了超豐富的.NET UI 框架,集成了向量圖形,豐富的流動文字支援flow text support,3D視覺效果和強大無比的控制元件模型框架。
WPF將Windows表示層發展至用宣告式語言進行開發,並且融入大量的動畫和特效,使得在Win32中極難做到的富客戶端應用能在WPF中信手拈來,同時用向量圖取代點陣圖,引入路由事件(RoutedEvent)對元素樹進行多層監聽,透過依賴屬性(DependencyProperty)動態變更控制元件樹等。在WinForm程式開發時,一旦涉及多執行緒操作,我們一般不可能沒有見過InvalidOperationException這個異常。這個異常的出現多數情況是由於worker執行緒(子執行緒)修改主執行緒控制元件(或物件)的屬性而導致的非法操作,當然這種做法也非每次都會失敗,這主要取決於子執行緒想要操作的物件是不是執行緒安全的。 WinForm控制元件提供了InvokeRequired屬性來判斷當前執行緒是不是建立此控制元件的執行緒。一旦控制元件建立完成,那麼InvokeRequired的效率將會不錯,且也能保證安全。不過若是目標控制元件尚未被建立(此時,雖然C#物件已經存在,不過其底層的視窗控制代碼仍舊為null),那麼InvokeRequired則可能會耗費比較長的時間。(它會從下至上遍歷整個控制元件樹,直到找到一個可以承載此控制元件且已經例項化並被建立了的父控制元件,這種做法可以保證子控制元件將會與父控制元件在同一個執行緒上建立。找到合適的父控制元件之後,框架即可執行同樣的檢查,比較當前執行緒的ID和建立該父控制元件的執行緒的ID。)。若是框架無法找到任何一個已建立的父窗體,那麼則需要找到一些其他型別的窗體。若在層次體系中無法找到可用的窗體,那麼框架將開始尋找暫存窗體(parking window),暫存窗體讓你不會被某些Win32 API奇怪的行為所幹擾。簡而言之,有些對窗體的修改(例如修改某些樣式)需要銷燬並重新建立該窗體。暫存窗體就是用來在父窗體被銷燬並重新建立的過程中用來臨時儲存其中的控制元件的。在這段時間內,UI執行緒僅運行於暫存窗體中。 通常,WPF 應用程式從兩個執行緒開始:一個用於處理呈現,一個用於管理 UI。呈現執行緒有效地隱藏在後臺執行,而 UI 執行緒則接收輸入、處理事件、繪製螢幕以及執行應用程式程式碼。 WPF為Windows Presentation Foundation的縮寫 ,其原來代號為“Avalon”,因“我佩服”拼音首字母組合一樣,國內有人調侃地稱之為“我佩服”。WPF是微軟新一代圖形系統,執行在.NET Framework 3.0架構下,為使用者介面、2D/3D 圖形、文件和媒體提供了統一的描述和操作方法。基於DirectX 9/10技術的WPF不僅帶來了前所未有的3D介面,而且其圖形向量渲染引擎也大大改進了傳統的2D介面,比如Vista中的半透明效果的窗體等都得益於WPF。 程式設計師在WPF的幫助下,要開發出媲美Mac程式的酷炫介面已不再是遙不可及的奢望。 WPF相對於Windows客戶端的開發來說,向前跨出了巨大的一步,它提供了超豐富的.NET UI 框架,集成了向量圖形,豐富的流動文字支援flow text support,3D視覺效果和強大無比的控制元件模型框架。