Winform、WPF、Silverlight、MFC区别与联系
WinForm
在Windows中,諸如窗體繪制等功能由GDI(圖形設(shè)備接口)實(shí)現(xiàn),放在操作系統(tǒng)內(nèi)核中。Windows Forms在底層使用的是GDI+。GDI+是GDI的“面向?qū)ο蟀b”,使用C++實(shí)現(xiàn)。.NET Windows Forms應(yīng)用程序中使用的GDI+其實(shí)是在C++實(shí)現(xiàn)的非托管代碼之上又包了一層,從而讓我們能使用C#這樣的托管編程語言調(diào)用GDI+功能繪圖。
?WPF
WPF底層使用的是DirectX,(Direct eXtension,簡稱DX)是由微軟公司創(chuàng)建的多媒體編程接口。由C++編程語言實(shí)現(xiàn),遵循COM。)就是通常用來開發(fā)游戲的那個(gè)DirectX。WPF與Windows Forms這兩者并沒有什么關(guān)系。按照微軟的意圖,WPF是用來取代WindowsForm的,所以最新的Visual Studio就使用了WPF開發(fā)界面,這是一個(gè)很明確的信號。
當(dāng)然,出于兼容目的,Windows Forms與WPF將長期并存,可以把它們看成是兩套獨(dú)立的界面技術(shù)。
此外,從技術(shù)的角度,WPF比WinForm先進(jìn)是不容置疑的。
1、解決Window Handle(句柄)問題?
??在Windows GDI或WinForm開發(fā)中復(fù)雜的GUI應(yīng)用程序,會使用的大量的控件,如Grid等。而每個(gè)控件或Grid cell都是一個(gè)小 ? ? 窗口,會使用一個(gè)Window handle,盡管控件廠商提供了很多優(yōu)化辦法,但還是會碰到Out of Memory或"Error Create Window handle",而導(dǎo)致程序退出。?
??WPF徹底改變了控件顯示的模式,控件不在使用窗口,也就不會占用Window handle。理論上,如果一個(gè)WPF只有一個(gè)主窗口的話,WPF只會使用一個(gè)Window handle(如果忽略用于Dispatcher的隱藏窗口的話)。所以WPF GUI程序不會出現(xiàn)Window handle不夠用的情況。?
2、多線程的處理??
在WinForm程序開發(fā)時(shí),最頭疼的一個(gè)問題就是,worker線程修改控件的屬性而導(dǎo)致程序崩潰,而且這種非法操作并不是每次都失敗。WinForm控件提供了InvokeRequired屬性來判斷當(dāng)前線程是不是控件創(chuàng)建線程。問題是當(dāng)控件樹很深時(shí),這個(gè)屬性會比較慢。?
??WPF開始設(shè)計(jì)的時(shí)候,就考慮到了多線程的問題。大部分的WPF類都繼承于DispatcherObject。DispatcherObject實(shí)際就是對Dispatcher的一個(gè)簡單封裝。Dispatcher提供了類似InvokeRequired的方法(CheckAccess)。這個(gè)方法只是比較線程的ID,所以會很快。另外,Dispatcher提供了優(yōu)先隊(duì)列,異步調(diào)用,Timer等功能,簡化了開發(fā)多線程GUI程序。?
3、控件的Composition?
??在WinForm如果要實(shí)現(xiàn)一個(gè)有Checkbox的下拉菜單,將不得不處理復(fù)雜的Window消息。而通過WPF控件的Content Model和Layout系統(tǒng),WPF控件可以包括任何類型的控件,甚至.Net CLR對象。很多現(xiàn)代的控件廠商也提供了Composition的控件,實(shí)現(xiàn)方法和WPF的Content模型也比較相似。WPF開發(fā)團(tuán)隊(duì)?wèi)?yīng)該借鑒了Infragistics的很多想法。有了這個(gè)基礎(chǔ),開發(fā)新的WPF控件更加簡單了。?
4、XAML?
??個(gè)人覺得XAML應(yīng)該是WPF中比較劃時(shí)代的東西。通過XAML,我們可以用文本的方式描述復(fù)雜的Object Graph。這個(gè)想法在VB中就有了,不過XAML更簡化,以便于使用工具來生成XAML。通過Command,Routing Event等機(jī)制,界面設(shè)計(jì)人員和程序員有比較清楚的界限。?
?????
4、Dependency Property?
??在WinForm開發(fā)中,經(jīng)常碰到的問題就是一個(gè)控件的值變了,其他控件也會跟著改變。解決辦法,要不是通過寫代碼,要不是通過數(shù)據(jù)綁定,前者是界面和代碼沒法分開,后者還不夠靈活。而WPF在這方面通過XAML可以簡單的把相關(guān)的屬性聯(lián)系起來,通過Extension可以實(shí)現(xiàn)復(fù)雜的綁定關(guān)系。?
?????
總的來說,WPF應(yīng)該是GUI發(fā)展的一個(gè)延續(xù),原來GUI中復(fù)雜的東西,現(xiàn)在通過簡單的文本就可以實(shí)現(xiàn)。?
Silverlight ?
?
Silverlight在API層可以看成是WPF的子集,但事實(shí)上除了這點(diǎn)之外,Silverlight與WPF并沒有任何聯(lián)系。因?yàn)?/span>Silverlight應(yīng)用程序不依賴于.NET Framework,只要用戶計(jì)算機(jī)(或手機(jī))安裝有Silverlight運(yùn)行環(huán)境(比如用戶通過互聯(lián)網(wǎng)給瀏覽器添加了Silverlight插件),就可以跑Silverlight應(yīng)用程序,并不要求用戶安裝龐大的.NET Framework。Silverlight運(yùn)行時(shí)環(huán)境在API層面也可以看成是標(biāo)準(zhǔn).NET Framework的功能子集,但它完全是重新寫過的,獨(dú)立于標(biāo)準(zhǔn)的.NET Framework,雖然為了方便應(yīng)用程序開發(fā),微軟努力保持兩者在API層面的一致性,但并不排除Silverlight運(yùn)行時(shí)環(huán)境日后會擁有全新的為.NET標(biāo)準(zhǔn)環(huán)境所不具備的功能。
Windows Forms/WPF/Silverlight這三者其實(shí)是獨(dú)立發(fā)展的三個(gè)技術(shù)領(lǐng)域,只不過微軟出于方便開發(fā)的目的,有意讓Silverlight與WPF在應(yīng)用層面開發(fā)體驗(yàn)(甚至包括大部分應(yīng)用層代碼)高度一致罷了。
?從開發(fā)角度來看,Windows Forms已有多年的歷史,高度成熟,擁有大量的第三方控件等各種資源,如果開發(fā)“標(biāo)準(zhǔn)”與“通用”界面類型的Windows應(yīng)用程序,使用它可以獲得較高的開發(fā)效率和不錯的運(yùn)行性能。
?WPF的長處在于它可以開發(fā)非常“個(gè)性化”的Windows應(yīng)用程序,你可以不受任何限制地實(shí)現(xiàn)你所能“夢想”到的各種用戶界面,而且在動畫等多媒體方面,WPF優(yōu)于Windows Forms,另外,WPF的數(shù)據(jù)綁定機(jī)制也比WindowsForms要強(qiáng)大和靈活。WPF的短處在于它對計(jì)算機(jī)硬件的要求較高,對于硬件配置較低的計(jì)算機(jī),其運(yùn)行性能不如Windows Forms版本。就目前來看,WPF的最佳平臺是Windows 7。
?
Windows Forms和WPF主要用于開發(fā)桌面應(yīng)用程序,Silverlight主要戰(zhàn)場是互聯(lián)網(wǎng),通常用它來開發(fā)RIA(豐富互聯(lián)網(wǎng)程序)的互聯(lián)網(wǎng)應(yīng)用程序,或者是跑在手機(jī)等智能移動設(shè)備上的應(yīng)用程序。可以這樣說,會WPF,不費(fèi)太多力氣,就可以轉(zhuǎn)去開發(fā)Silverlight應(yīng)用程序,兩者實(shí)在是太相似了,特別是界面層代碼,由于都使用XAML,這使我們可以比較容易地為某一應(yīng)用程序同時(shí)開發(fā)“桌面版”、“手機(jī)版”和“瀏覽器版”三種版本,而這三種版本其用戶界面都可以擁有一致的外觀和用戶使用體驗(yàn)。
MFC?
微軟基礎(chǔ)類庫(英語:Microsoft Foundation Classes,簡稱MFC)是一個(gè)微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows API,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。
對比MFC ,Winform ,WPF
?
? ? ? ?MFC 生成本機(jī)代碼,自然是很快。可是,消息循環(huán),減緩了界面顯示速度。
? ? ? ?winform 封裝了 win32 的api,多次進(jìn)行P/invoke 操作 (大部分使用p/invoke操作封裝),速度慢。
? ? ? ?wpf是一種新的模型,不再使用win32 模型,自己新建模型,使用dx 作為新的顯示技術(shù),直接訪問驅(qū)動程序,加快了運(yùn)行速度, ? ? ? ?可是,這種模型,需要支持dx 9 的顯卡,硬件要求高(你還能找到現(xiàn)代機(jī)器不支持dx9 的嗎?) ?
開發(fā)效率上,MFC <WPF <winform
盡管MFC開發(fā)界面執(zhí)行效率高但是開發(fā)效率低,作為現(xiàn)在的項(xiàng)目開發(fā)來說,時(shí)間跟開發(fā)效率往往能決定項(xiàng)目的成敗,所以除非有特別的需求,否則都回盡量避免用mfc來做開發(fā),MFC只是一個(gè)弱封裝器。
開發(fā)成本,MFC〉wpf〉winform
用MFC開發(fā)成本太高,對開發(fā)者能力要求更高,作為客服當(dāng)然希望開發(fā)的費(fèi)用越少越好,開發(fā)者當(dāng)然希望錢賺得越多越好,這樣一比,這也是MFC沒落的一個(gè)很大的原因。
界面執(zhí)行效率上,MFC==WPF〉winform
隨著計(jì)算機(jī)硬件的性能提高,多核cpu的普及,它們的差距會越來越小。
開發(fā)靈活性上:wpf〉MFC〉winform
美觀上:Wpf〉winform〉MFC
這一項(xiàng)中MFC下要開發(fā)出一個(gè)華麗的ui極其困難,也許你可以說你可以用控件,但是商業(yè)開發(fā)控件是要收費(fèi)的!!Wpf很容易就可以做出vista那樣的ui特效。mfc要寫出這種效果不知要寫到何年何月。
這樣一來MFC存在的價(jià)值就更低了。效率和美觀不如Wpf,開發(fā)效率又不如winform,預(yù)計(jì)不出10年,隨著vista取代xp,mfc將會退出歷史舞臺。
內(nèi)存使用上:wpf〉winform〉MFC
隨著計(jì)算機(jī)硬件的性能提高wpf這個(gè)缺點(diǎn)會被忽略。
使用范圍:wpf〉MFC==winform
有以上可知:WPF 大有取代winform 和MFC之勢,從未來net的發(fā)展來看,MFC以后只會變成一種經(jīng)典,作為一種技術(shù)來供開發(fā)者學(xué)習(xí),winform和WPF兩者會并存發(fā)展,但最終都會被WPF取代,最終實(shí)現(xiàn)桌面應(yīng)用程序和瀏覽器應(yīng)用程序的統(tǒng)一。
?
轉(zhuǎn)載于:https://www.cnblogs.com/peterYong/p/6556598.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Winform、WPF、Silverlight、MFC区别与联系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Http client 请求
- 下一篇: Java:网络编程之UDP的使用