前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows Runtime(WinRT) 揭秘

Windows Runtime(WinRT) 揭秘

作者头像
张善友
发布2018-01-22 11:25:44
1.2K0
发布2018-01-22 11:25:44
举报
文章被收录于专栏:张善友的专栏

看了个BUILD的PPT,Windows Runtime (RT)并不是一些新闻网站说的那样微软自废.NET武功,而是恰恰相反,WinRT是Win32API的现代版,其中有很深的.NET的基因,是Metro UI的.NET基础,如果考察Metadata的变化,WinRT的API定义的元数据是基于标准ECMA 335,也就是.NET的标准 ,WinRT也是一个沙箱的环境,针对AppStore环境设计的。

视频

基础知识

微软以推出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 代替。

代码语言:javascript
复制
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只是提供了一种选择。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档