Windows Runtime(WinRT) 揭秘)

來源:互聯網
上載者:User

http://www.cnblogs.com/shanyou/archive/2011/09/17/WinRT.html

看了個BUILD的PPT,Windows Runtime (RT)並不是一些新聞網站說的那樣微軟自廢.NET武功,而是恰恰相反,WinRT是Win32API的現代版,其中有很深的.NET的基因,是Metro UI的.NET基礎,如果考察Metadata的變化,WinRT的API定義的中繼資料是基於標準ECMA 335,也就是.NET的標準 ,WinRT也是一個沙箱的環境,針對AppStore環境設計的。

視頻地址:http://video.ch9.ms/build/2011/mp4/874.mp4

基礎知識

微軟以推出Windows 8為契機,以解決Windows長期存在的問題,並帶來了新的使用者介面,使得Windows更加安全和AppStore的商業模式。微軟在Windows 8 裡打造了第三個 XAML-based UI 系統, WPF只是一個供 .NET 這個圈子使用的XAML UI系統 Silverlight只是給瀏覽器使用的XAML UI系統,Windows Phone7將Silverlight到了手機,現在將XAML帶到了涵蓋PC、Pad、Phone的所有系統(雖然微軟認為平板也是PC,我還是想叫他Pad,用過iPad的都知道蘋果所定義的Pad和PC有很大區別)。

.NET開發人員都對.NET 的P / Invoke和COM Interop 很熟悉了,這兩種技術使得.NET人員可以使用Win32 API和COM組件,Mono也是使用P/Invoke技術建立原生的庫,例如Gtk# 綁定到 Gtk+ API, MonoMac 綁定到Cocoa API, Qyoto 綁定到Qt API,Mono出現了MonoTouch,MonoDroid和MonoMac等等很有創新性的產品。 COM Interop 還可以使得C/C++ 從 C#匯入Com類型庫。

建立原生庫的方法很多,但是這些工作都得是手工去做,很乏味而且容易出錯,從這點來說WinRT也是一個很有創新的,可以讓所有的開發人員用同一個模型建立Metro UI的應用。

WinRT

WinRT是一個新的API 集合,具有以下特性:

  • 它實現了Metro UI規範的UI庫
  • 為Windows開發人員提供一個簡單的UI編程模型,你不需要學習Win32API的那些複雜的API了
  • 它使用XAML-base的UI系統
  • API都設計成了非同步
  • 它和.NET一樣是個沙箱的API,自成體系,用於建立AppStore上的應用程式。
  • API的中繼資料格式是ECMA335,和.NET一樣的標準。這是不是意味著以後Mono也可以在xUnit上去實現這樣的API呢?

WinRT封裝的新的使用者介面系統,和Win32API一樣是Com的上層。

WinRT Projections

我們所說的“Binding”,微軟現在叫做“Projections”,又是一個新名詞。Projections就是向三個環境 Native (C and C++), HTML/Javascript 和.NET 暴露介面的過程。所以在Win8上各類開發人員依然可以用著不同的工具,但是卻是使用著統一的模型。

如果開發人員使用.NET或者C++ 寫的組件,它的API被儲存在一個WinMD檔案裡,你可以在三種環境(原生、javascript和.NET)。即使你的組件是用C++ 寫的,也不需要通過COM向外暴露,使用起來更像是一個物件導向的C++ API。

WinRT的底層定義了一套基本的類型和各種環境的映射,這是不是很像.NET環境裡面對不同語言的支援哈。

非同步API

微軟認為,當給開發人員一個使用同步和非同步API的選擇的時候,開發人員會選擇簡單的同步API,這在我們的.NET 編程實踐中得到證明,.NET有很成熟的非同步編程模型,還有特意為並行和非同步處理而設計的F#,結果是什麼呢,各位同學心裡有數。

在WinRT中,微軟一直遵循一個簡單的規則:如果一個API預計耗時超過50毫秒,那麼API就是非同步,也就是說API是非同步哦,這樣就能確保Metro UI上的操作體驗是最好的。

非同步編程曆來是一個繁瑣的過程,回調和狀態,還有異常處理等。為了簡化這個過程,C#和VB也擴充了支援 F#-inspired await/async 模型,非同步編程變成了歡樂之旅。

.NET的首要地位不見了嗎?

之前的新聞中一直在質疑.NET 被微軟拋棄了,當然不是了。也不是所有的.NET API 都整合到了WinRT中,只是一個子集。

當你使用C#和VB,你使用的是完整的.NET架構。但是他們只暴露了一個較小的子集API給Windows 8的開發人員。你可能會想,我可以通過一些技巧使用到整個.NET,如果你的程式不需要提交AppStore上接受微軟的審核,這是可以的。這種策略明顯是跟蘋果學的。

藉此機會.NET團隊也對.NET做了一次清理,mscorlib.dll和System.dll中已被分割在不同的庫裡頭了,隨著Win8發布的.NET版本是4.5了,也就是說.NET 4.5不是.NET 4的簡單補丁包,裡頭加了不少東西,ASP.NET的版本號碼也是4.5,不像.NET 2.0 ~3.5 SP1,ASP.net的版本還是2。0。為了在Win8裡開發,開始學習.NET 4.5又是必須的了,這裡關注的集中在用戶端開發,同樣的在伺服器端開發方面.NET 4.5也加入大量的乾貨。

建立WinRT 組件

雖然WinRT支援很多的語言,但是微軟只是用C++和.NET示範了如何開發一個WinRT組件,使用.NET來開發WinRT組件會比C++簡單得多。也不是所有的.NET特性都能用上哦,比如組件類就不能使用private 欄位,在非同步API裡不能使用Task<T> ,要用IAsyncOperation 代替。

public sealed class AddTwo
{
public int Add (int a, int b)
{
return a + b;
}

public async IAsyncOperation SubAsync (int a, int b)
{
return a - await (CountEveryBitByHand (b));
}
}

你會發現上述代碼沒有任何形式的COM聲明,唯一限制的是,類必須是個密封的(除非你是在建立一個XAML UI組件,這種情形下這種限制是接觸的)

UI編程

當涉及到使用者介面的開發的時候,你你可以使用HTML與CSS樣式或使用XAML的你的應用程式的使用者介面。當你回到介面層,就可以用HTML & CSS或者是XAML UI,用HTML& Css做出來的介面就是Web了,而是一個Windows應用,早在Vista開始就有了類似的應用,Windows7上做了改進,叫做Gadgets ,Windows 8就進化到了Metero UI,和C++、.NET並駕齊驅了。

Windows8的開發架構並沒有基於HTML5和JavaScript,開發人員完全可以用原生C++、C#和Silverlight去開發對平板和觸控友好的應用,HTML5和JavaScript只是提供了一種選擇。

作者: 自由、創新、研究、探索……
出處:http://shanyou.cnblogs.com/
著作權:本文著作權歸作者和部落格園共有
轉載:歡迎轉載,為了儲存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段聲明;必須在文章中給出原文串連;否則必究法律責任 
分類: .net framework, Windows 8 綠色通道:好文要頂關注我收藏該文與我聯絡
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.