王燕丽

博客园 首页 联系 订阅 管理

2011年4月1日

摘要: 看完上篇之后,我们知道await关键字后面跟的是一个Task对象,虽然为了看起来很像一个实际方法,Async CTP类库为现有对象添加的扩展方法没有使用典型的Get/Make等字眼,更准确的说法应该是await后面应该跟的是一个Await对象,或者是一个有一个public类型的GetAwaiter()方法并且能返回Awaiter对象的对象,这里所谓的Awaiter对象和我们以往的说法稍微有些区别,因为是编译器层的语法糖,所以Awaiter对象并没有实际的意义,比如实现了一个IAwaitable之类的接口,它仅仅要求有一个BeginAwait和EndAwait方法。看下面的代码片段: 1: aw 阅读全文
posted @ 2011-04-01 15:26 王燕丽 阅读(1406) 评论(1) 推荐(0)

2011年3月31日

摘要: Async CTP为我们在单线程实现异步操作开辟了一条大道,尤其对于SL中的WCF来说让我们从繁琐的事件处理中解脱出来,本来我想写一个SL中使用Socket实现的RPC框架(正在我项目中使用)的系列笔记,不过有朋友提到了应该用Async CTP来规避WCF的异步方法带来的繁琐,事实上Async CTP在我项目中还不够灵活(应该是WCF对我的应用来说不够灵活),不过还是先放下那个系列,先看看Async CTP可以做些什么。本文不会介绍Async CTP的使用方法,只分析在不改动SL CLR的基础上编译器如何根据async和await两个关键字对我们的代码做出正确的改动以达到单线程异步操作。关于单 阅读全文
posted @ 2011-03-31 22:20 王燕丽 阅读(1491) 评论(3) 推荐(5)

2011年3月29日

摘要: 文中所有代码片段是手工输入,并非从项目中拷贝而来,因此不能保证其准确无误,仅为了配合所阐述的思路。在上篇中我们实现了DataPager的扩展,本文我们的目标则是ComboBox,标题的“扩展”两个字在本文稍有不适,因为对DataPager我们确实是扩展了它的外观和功能,而对于ComboBox,我们要做的事情可能用“改变”这个词更加恰当。好了,来看看我们准备对ComboBox做些什么。Microsoft为我们提供的ComboBox简单好用,当然简单好用的另外一个意思就是在有些场合它就会显得很笨,在网上搜索一下ComboBox,比较常见的问题都是ComboBox下拉框带自定义控件有关的,尤其是带T 阅读全文
posted @ 2011-03-29 18:30 王燕丽 阅读(676) 评论(2) 推荐(3)

摘要: 文中所有代码片段是手工输入,并非从项目中拷贝而来,因此不能保证其准确无误,仅为了配合所阐述的思路。在上文中我们利用Binding构建了一个简单的DependencyPropertyWatcher类,可以使我们挂接一个回调函数检测任何DependencyProperty属性的变化,接下来我们就利用它来扩展DataPager,使它更符合我们习惯的外观和信息。首先查看原生DataPager的ControlTemplate,发现如下定义:其中Horizontal排列的StackPanel就是DataPager的主要呈现容器了(在上一文中有提到),不过它没有提供Name属性,因此我们只能从名为Root的 阅读全文
posted @ 2011-03-29 18:28 王燕丽 阅读(513) 评论(0) 推荐(1)

2011年3月28日

摘要: WPF由于其局限性,目前并不普及,但是其控件模型设计也许是有史以来最优秀的。Silverlight很好的继承了这一特性,各种模版尤其是ControlTemplate的引入让我们很轻易的可以开发出五花八门的控件,但是也正由于它的灵活强大,在基础类库中的控件并没有提供足够多的属性和事件来让我们使用,在很多时候只需要改变一个微小的特性,不得不复制大量ControlTemplate的xaml修改其他的一两处代码,然后在继承类中也做一点小的修改。 SL有控件有大量和WinForm对应控件相似的属性,但是和WinForm不一样,在SL中我们找到了名为XXX属性之后,很难发现有与之关联的XXXChange. 阅读全文
posted @ 2011-03-28 17:15 王燕丽 阅读(808) 评论(0) 推荐(2)