wpf開發於winform之後,從技術發展的角度,wpf比winform先進是不容置疑的。我覺得wpf相比於winform有下面的一些較好的特性:
解決window handle問題
在windows gdi或winform開發中複雜的gui應用程式,會使用的大量的控制項,如grid等。而每個控制項或grid cell都是乙個小視窗,會使用乙個window handle,儘管控制項廠商提供了很多優化辦法,但還是會碰到out of memory或"error create window handle",而導致程式退出。
wpf徹底改變了控制項顯示的模式,控制項不在使用視窗,也就不會占用window handle。理論上,如果乙個wpf只有乙個主視窗的話,wpf只會使用乙個window handle(如果忽略用於dispatcher的隱藏視窗的話)。所以wpf gui程式不會出現window handle不夠用的情況。
多執行緒的處理
在winform程式開發時,最頭疼的乙個問題就是,worker執行緒修改控制項的屬性而導致程式崩潰,而且這種非法操作並不是每次都失敗。winform控制項提供了invokerequired屬性來判斷當前執行緒是不是控制項建立執行緒。問題是當控制項樹很深是,這個屬性會比較慢。
wpf開始設計的時候,就考慮到了多執行緒的問題。大部分的wpf類都繼承於dispatcherobject。dispatcherobject實際就是對dispatcher的乙個簡單封裝。dispatcher提供了類似invokerequired的方法(checkaccess)。這個方法只是比較執行緒的id,所以會很快。另外,dispatcher提供了優先佇列,非同步呼叫,timer等功能,簡化了開發多執行緒gui程式。
控制項的composition
在winform如果要實現乙個有checkbox的下拉列表,將不得不處理複雜的window訊息。而通過wpf控制項的content model和layout系統,wpf控制項可以包括任何型別的控制項,甚至.net clr物件。很多現代的控制項廠商也提供了composition的控制項,實現方法和wpf的content模型也比較相似。wpf開發團隊應該借鑑了infragistics的很多想法。有了這個基礎,開發新的wpf控制項更加簡單了。
xaml
個人覺得xaml應該是wpf中比較劃時代的東東。通過xaml,我們可以用文字的方式描述複雜的object graph。這個想法在vb中就有了,不過xaml更簡化,以便於使用工具來生成xaml。通過command,routing event等機制,介面設計人員和程式設計師有比較清楚的界限。
dependency property
在winform開發中,經常碰到的問題就是乙個控制項的值變了,其他控制項也會跟著改變。解決辦法,要不是通過寫**,要不是通過資料繫結,前者是介面和**沒法分開,後者還不夠靈活。而wpf在這方面通過xaml可以簡單的把相關的屬性聯絡起來,通過extension可以實現複雜的繫結關係。
總的來說,我覺得wpf應該是gui發展的乙個延續,原來gui中複雜的東西,現在通過簡單的文字就可以實現。
windows presentation foundation unleashed by adam nathan
msdn
essential windows presentation foundation(*強烈推薦,回答了很多why的問題)
windows wpf source code
reflector
WPF與WinForm開發有什麼區別
wpf與winform開發有什麼區別?wpf開發於winform之後,從技術發展的角度,wpf比winform先進是不容置疑的。我覺得wpf相比於winform有下面的一些較好的特性 解決window handle問題 在windows gdi或winform開發中複雜的gui應用程式,會使用的大量...
WPF與WinForm開發有什麼區別
wpf與winform開發有什麼區別?2010 11 06 21 43 wpf開發於winform之後,從技術發展的角度,wpf比winform先進是不容置疑的。我覺得wpf相比於winform有下面的一些較好的特性 解決window handle問題 在windows gdi或winform開發中...
WPF與WinForm開發有什麼區別
wpf與winform開發有什麼區別?2010 11 06 21 43 wpf開發於winform之後,從技術發展的角度,wpf比winform先進是不容置疑的。我覺得wpf相比於winform有下面的一些較好的特性 解決window handle問題 在windows gdi或winform開發中...