摘要:在我们的桌面应用程序(不管是WinForm还是WPF)我们都必须去面对线程的dispatching。在window图形用户系统中像基于.net的WinForm或者是WPF都有一个唯一的主线程。他们是基于Win32消息循环队列机制处理UI界面的事件(又分为事件的钻取和隧道)、渲染。所以在一个长时间的事件处理中,我们的UI不会得到及时的更新和响应,甚至会出现假死状态。所以在GUI编程有这么一条黄金规则:不要再GUI主线程处理长时间的应用。对于长时间的处理,我们需要应用在异步线程中,并且通常认为最佳的实践并不是为每一个操作创建一个线程,而是放入线程池队列中。注:一下代码都分析了WinForm,但是贴 阅读全文
MSBuild + MSILInect实现编译时AOP-改变前后对比
2011-08-09 23:20 by 破狼, 2844 阅读, 2 推荐, 收藏, 编辑
摘要:实现静态AOP,就需要我们在预编译时期,修改IL实现对代码逻辑的修改。Mono.Cecil就是一个很好的IL解析和注入框架,参见编译时MSIL注入--实践Mono Cecil(1)。 我的思路为:在编译时将加有继承制MethodInterceptBaseAttribute标签的原方法,重新组装成一个方法(并加上[CompilerGenerated]标签),在加入横切注入接口前后代码,调用此方法。比如代码:[TestAOPAttribute(Order=1)]publicClass1TestMethod1(inti,intj,Class1c){Console.WriteLine("ok 阅读全文
MSBuild + MSILInect实现编译时AOP之预览
2011-08-09 14:05 by 破狼, 3338 阅读, 3 推荐, 收藏, 编辑
摘要:在本文之前的前几篇浅谈.NET编译时注入(C#-->IL)、浅谈VS编译自定义编译任务—MSBuild Task(csproject)、编译时MSIL注入--实践Mono Cecil(1)已经讨论了MSBuild和Mono.Cicel。在这里我们将会利用它来实现一个简单的编译时AOP注入机制(这里所说的编译时是指c#到MSIL的预编译过程)。我更倾向于像EL(微软企业库框架)这类动态AOP。编译时AOP有PostSharp这种被称之为静态AOP框架,其优势在于直接代码语句,性能更好,它不需要我们多余的代码,像EL这种动态AOP,一般我们是不能直接new一个对象,需要容器(Containe 阅读全文
编译时MSIL注入--实践Mono Cecil(1)
2011-07-28 21:34 by 破狼, 13133 阅读, 7 推荐, 收藏, 编辑
摘要:紧接上两篇浅谈.NET编译时注入(C#-->IL)和浅谈VS编译自定义编译任务—MSBuild Task(csproject),在第一篇中我们简单研究了c#语法糖和PostSharp的MSIl注入,紧接第二篇中我们介绍了自定义MSBuild编译任务(记得有位老兄发链接用 MSBuild自动发布Silverlight xap ,我想说的我做的是自定义编译任务,不是什么发布,MSBuild本就是一个发布工具)。之所以在此前介绍编译Task是因为我讲介绍的就是利用MSBuild和MSILInject制作静态注入式AOP,想成熟的产品PostSharp,当然我也不会去重造轮子,但需要明白起原理和 阅读全文
Silverlight DataGrid行背景分组着色
2011-07-28 15:30 by 破狼, 2719 阅读, 1 推荐, 收藏, 编辑
摘要:利用Silverlight DataGrid LoadingRow事件传入参数DataGridRowEventArgs我们可以获取到Row对象She之其背景。下面是一个简单示例C# :usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media; 阅读全文
浅谈VS编译自定义编译任务—MSBuild Task(csproject)
2011-07-27 23:17 by 破狼, 15093 阅读, 6 推荐, 收藏, 编辑
摘要:在上一篇浅谈.NET编译时注入(C#-->IL)中我们简单的反编译查看了几种c#语法糖和PostSharp在编译成IL时为我做的MSIL注入。紧接着在这节,要来看的就是MSBuild Task。在我们的代码预编译过程中我们可以创建我们自己的任务Task。下面我们就开始做一个简单的Task。1:首先需要添加Microsoft.Build.Utilities.v3.5.dll和Microsoft.Build.Framework.dll中引用。在Microsoft.Build.Framework中为我们定义了接口ITask,自定义任务需要去实现这个契约。其定义如下:publicinterfac 阅读全文
浅谈.NET编译时注入(C#-->IL)
2011-07-26 21:27 by 破狼, 11321 阅读, 8 推荐, 收藏, 编辑
摘要:.NET是一门多语言平台,这是我们所众所周知的,其实现原理在于因为了MSIL(微软中间语言)的一种代码指令平台。所以.NET语言的编译就分为了两部分,从语言到MSIL的编译(我喜欢称为预编译),和运行时的从MSIL到本地指令,即时编译(JIT)。JIT编译分为经济编译器和普通编译器,在这里就不多说了,不是本文的重点。本文主要讨论下预编译过程中我们能做的改变编译情况,改变生成的IL,从编译前后看看微软C#3.0一些语法糖,PostSharp的静态注入等等。1:我们先来看看最简单的var:C#:publicvoidTestVar(){ vari=0; Console.WriteLine(i);}. 阅读全文
Google Chrome 語音辨識
2011-07-15 15:48 by 破狼, 957 阅读, 0 推荐, 收藏, 编辑
摘要:Google Chrome 上支持语音输入,看了一下,不是通过 flash 或其他 plugin,而是 google chrome 內置的。Code:HTML5 input tag 如下,就会在一旁出现个可以按的麦克风:[代码]不加 x-webkit-grammar 也行,但英文辨识效果会逊色很多。把 Mac 系统語言設成中文的話,就可以辨识中文了。我的测试效果图: 网上有位老兄的测试视频:htt... 阅读全文
WCF分发简述-ChannelDispatcher,EndpointDispatcher,MessageFilter
2011-07-08 13:34 by 破狼, 3139 阅读, 6 推荐, 收藏, 编辑
摘要:学习和使用WCF已经有很长一段时间了,但是一直不敢写关于这方面的blog。以为院子里有个WCF高手(Artech),我学习WCF大部分就是看的他的blog。所以在这里感谢Artech大哥的分享。前些日子的XX问到这个问题,所以我才斗胆有了这篇blog,欢迎高手指正。1:ServiceHost 和ChannelDispatcher: 没使用过Viso,但是现在的机子上只有这个东西,所以随便乱画:WCF分发是指在服务端信道监听到Message,路由选择那个service,operation操作的过程,我的理解。首先我们的WCF会有一个宿主程序(控制台,Windows服务,或者是IIS寄宿等等),当 阅读全文
Silverlight获取WebHost配置信息--WebClient和XmlSerializer模拟
2011-07-06 19:49 by 破狼, 2365 阅读, 3 推荐, 收藏, 编辑
摘要:在我们的silverlight项目中,是被打包为xap zip文件下载到客户端,所以silverlight中的app配置文件我们不能直接修改,而在其宿主web host中的web.config在服务端我们也不能直接访问。在我们的项目中遇见了这个问题所以我就有了此博客。 先说明解决这个问题的方案有:1:调用wcf,webservice,Asp.net页面等服务端数据源,异步显示在我们的UI。2:利用silverlight项目的宿主页面 object,传入初始化参数,在silverlight app中获取。上面的方案都是针对于我们的少量有限配置信息的获取。我这里做的是利用在服务端的xml配置文件. 阅读全文