WINDOWS窗體應(yīng)用程序與WPF應(yīng)用程序的區(qū)別? |
WINDOWS窗體應(yīng)用程序與WPF應(yīng)用程序的區(qū)別? 用WPF更容易做的漂亮 感覺有以下幾個(gè)大區(qū)別: WPF的線程模型和winform的線程模型不同 WPF到處用到數(shù)據(jù)綁定,winform在列表中才用的多 WPF支持3D,winform本身沒有,需要引入托管的DX WPF有現(xiàn)成的動(dòng)畫機(jī)制,winform沒有 WPF的界面可以用XAML寫,后臺(tái)邏輯用C#,winform全部C#。也就是WPF真正做到界面與邏輯分離。 WPF開發(fā)于WinForm之后,從技術(shù)發(fā)展的角度,WPF比WinForm先進(jìn)是不容置疑的。我覺得WPF相比于WinForm有下面的一些較好的特性: 解決Window Handle問題 在Windows GDI或WinForm開發(fā)中復(fù)雜的GUI應(yīng)用程序,會(huì)使用的大量的控件,如Grid等。而每個(gè)控件或Grid cell都是一個(gè)小窗口,會(huì)使用一個(gè)Window handle,盡管控件廠商提供了很多優(yōu)化辦法,但還是會(huì)碰到Out of Memory或"Error Create Window handle",而導(dǎo)致程序退出。 WPF徹底改變了控件顯示的模式,控件不在使用窗口,也就不會(huì)占用Window handle。理論上,如果一個(gè)WPF只有一個(gè)主窗口的話,WPF只會(huì)使用一個(gè)Window handle(如果忽略用于Dispatcher的隱藏窗口的話)。所以WPF GUI程序不會(huì)出現(xiàn)Window handle不夠用的情況。 多線程的處理 Dependency Property 在WinForm開發(fā)中,經(jīng)常碰到的問題就是一個(gè)控件的值變了,其他控件也會(huì)跟著改變。解決辦法,要不是通過寫代碼,要不是通過數(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)。 |