<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_程序创新</title><subtitle type="text">中华软件兴本命年饰品黑曜石貔貅汽车挂件</subtitle><id>http://feed.cnblogs.com/blog/u/38759/rss</id><updated>2012-05-06T15:21:23Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/38759/rss"/><entry><id>http://www.cnblogs.com/126163/archive/2011/12/13/2287012.html</id><title type="text">在静态页面精确的实现团购倒计时的javascript</title><summary type="text">团购商品，每次只需要读取一次数据库，而且可以精确的控制倒计时的剩余时间，而且还可以随时的提取最新的团购商品而无需重新生成静态页面！</summary><published>2011-12-13T15:45:00Z</published><updated>2011-12-13T15:45:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2011/12/13/2287012.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2011/12/13/2287012.html"/><content type="html">&lt;p&gt;&lt;strong&gt;倒计时思路：&lt;br /&gt;&lt;/strong&gt;在静态页面要实时的显示最新的团购商品，我们必须要用javascript来跟服务器进行沟通，首先是在页面加载完成后执行ajax事件，来读取最新的团购信息，读取的时候，要提出来团购还剩下多少秒结束，提出来之后，根据本地秒数的变化来对提取出来总倒计时秒数进行相减，就可以得到团购商品的剩余时间了！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;好处：&lt;br /&gt;&lt;/strong&gt;团购商品，每次只需要读取一次数据库，而且可以精确的控制倒计时的剩余时间，而且还可以随时的提取最新的团购商品而无需重新生成静态页面！&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;具体的代码及操作流程：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.首先来用jquery添加一个页面加载的事件：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;$(document).ready(function(){$.ajax({type:"POST",url:"ajax的动态页面的处理地址",success:function(msg){在此处可以将读出来的内容添加到团购容器中}});})&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.加载完团购容器之后，用来读取具体的团购商品列表，并且提取出来每个商品剩余的时间来！&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&amp;nbsp;getajaxload()&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;tag=&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;m=0;m&amp;lt;4;m++)&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;($('#overtuan'+m).length&amp;gt;0)&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag=&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrintValue('overtuan'+m,$('#overtuan'+m).attr('name'));&lt;br /&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(tag)&lt;br /&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;timenow=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Date().getTime();&lt;br /&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;passnow=&amp;nbsp;(timenow-datestarttime)/1000;&lt;br /&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(passnow&amp;lt;50)&lt;br /&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout("getajaxload()",3000);&lt;br /&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3.具体执行倒计时的方法：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;sh;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;datestarttime=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Date().getTime();&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;passsecond=&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;function&amp;nbsp;PrintValue(varid,vartoal)&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;timenow=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Date().getTime();&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;((passsecond-(timenow-datestarttime)/&lt;span style="color: #800080"&gt;1000&lt;/span&gt;)&amp;lt;-&lt;span style="color: #800080"&gt;10&lt;/span&gt;||(passsecond-(timenow-datestarttime)/&lt;span style="color: #800080"&gt;1000&lt;/span&gt;)&amp;gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{location.reload();}&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;passsecond=&amp;nbsp;(timenow-datestarttime)/&lt;span style="color: #800080"&gt;1000&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(passsecond&amp;gt;vartoal)&lt;br /&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location.reload();&lt;br /&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(varid).innerHTML=getPrintString(vartoal-passsecond);&lt;br /&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sh=setTimeout(&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;PrintValue(\'&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;+varid+&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\',&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;+vartoal+&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;)&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;,&lt;span style="color: #800080"&gt;1000&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;function&amp;nbsp;getPrintString(totals)&lt;br /&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;_hour=parseInt(totals/&lt;span style="color: #800080"&gt;3600&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;_mim=parseInt((totals-parseInt(totals/&lt;span style="color: #800080"&gt;3600&lt;/span&gt;)*&lt;span style="color: #800080"&gt;3600&lt;/span&gt;)/&lt;span style="color: #800080"&gt;60&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&amp;nbsp;_secd=parseInt(totals-parseInt(totals/&lt;span style="color: #800080"&gt;60&lt;/span&gt;)*&lt;span style="color: #800080"&gt;60&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;p&amp;nbsp;class=\"notice\"&amp;gt;&amp;amp;nbsp;距团购结束仅剩：&amp;lt;em&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;+_hour+&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;/em&amp;gt;时&amp;lt;em&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;+_mim+&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;/em&amp;gt;分&amp;lt;em&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;+_secd+&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;/em&amp;gt;秒&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;到此，整个过程就可以实现效果了，上面有几个注意事项是需要注意一下的！&lt;/p&gt;&lt;p&gt;1.里面有一个时间差的问题，如果程序设置的一秒变化一次的话，如果本地的时间差却大于或者小于10秒的话，那么就执行重新加载页面！&lt;/p&gt;&lt;p&gt;2.如果团购结束了，那么也重新加载页面，如果没有团购商品了，就暂停加载团购容器！&lt;/p&gt;&lt;p&gt;这个是我自己写着自己用的东西，分享出来给大家，希望大家可以用得到！&lt;/p&gt;&lt;p&gt;具体的实现效果大家可以参考：&lt;a href="http://www.56fuyuan.com/"&gt;http://www.56fuyuan.com/&lt;/a&gt;&amp;nbsp;大家点击查看源码，就可以看到整个实现流程和代码了，也可以看到实际效果了！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/2287012.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2011/12/13/2287012.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/11/23/1885993.html</id><title type="text">互联网从靠技术创业逐渐转为电子商务创业</title><summary type="text">御泥坊的成功需要的技术可能不是那么的深了，但是运营官的要求就大大的增加了。当然了像现在的一些比较成型的电子商务网站系统，也极大的促进了电子商务创业的形成!</summary><published>2010-11-23T15:11:00Z</published><updated>2010-11-23T15:11:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/11/23/1885993.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/11/23/1885993.html"/><content type="html">&lt;p&gt;一切的社会活动跟经济是分不开的，互联网最初诞生的时候，主要是为了文件与信息共享等，&lt;/p&gt;&lt;p&gt;但是当互谅网发展到一定程度的今天，经济活动自然开始逐渐上升为互联网的主要活动，&lt;/p&gt;&lt;p&gt;从近几年来看，电子商务已经开始逐渐的被大多数人都接受，由于大量人群的参与，必然要&lt;/p&gt;&lt;p&gt;牵扯到人的需求，人一旦有了需求，就开始诞生了大量的网络交易。&lt;/p&gt;&lt;p&gt;现在互联网的普及，电脑等基础设置的发展，就像当初的自行车一样，越来越普及，&lt;/p&gt;&lt;p&gt;如果照这个速度下去的话，中国也将会成为世界上网民最多的国家，成为网络超级大国。&lt;/p&gt;&lt;p&gt;好了，我们开始进入正题：&lt;/p&gt;&lt;p&gt;大家看一下现在的互联网不难发现，好多比较牛的一些企业最原始都是靠一种互联网技术才发展起来的，&lt;/p&gt;&lt;p&gt;比如现在的百度，谷歌，QQ，淘宝，包括咱们的博客园，应该都是靠过硬的技术加上一定营销活动才发展起来的！&lt;/p&gt;&lt;p&gt;这个是毋庸置疑的，所以提到互联网大家都比较崇拜技术非常牛的人。&lt;/p&gt;&lt;p&gt;当然了，也正是这些牛人建起来的平台，让更多的人参与了进来，所以慢慢的就产生了电子商务，其中比较有代表性的，&lt;/p&gt;&lt;p&gt;像淘宝，他完全是一个靠技术实现起来的一个平台，让更多的人参与了进来，让很多人成功的实现了电子商务。&lt;/p&gt;&lt;p&gt;当然了还有像拍拍，易趣 ，有啊等也都是非常不错的平台。&lt;/p&gt;&lt;p&gt;现在大家可以看一下淘宝上的淘宝卖家，篮冠以上的卖家不知道有多少家了，皇冠以上的卖家又有多少了，&lt;/p&gt;&lt;p&gt;他们中有很多的卖家成功的成为了百万富翁甚至千万富翁，包括现在的淘宝商城，企业，甚至知名的名牌也开始借助于&lt;/p&gt;&lt;p&gt;淘宝展开电子商务了。&lt;/p&gt;&lt;p&gt;我在这个地方举一个例子，&lt;a href="http://www.csdnit.com/special/21.html" target="_self"&gt;御泥坊&lt;/a&gt;面膜这是一个很明显的借助淘宝这个平台发展起来的品牌电子商务，&lt;/p&gt;&lt;p&gt;御泥坊的成功需要的技术可能不是那么的深了，但是运营官的要求就大大的增加了。&lt;/p&gt;&lt;p&gt;当然了像现在的一些比较成型的电子商务网站系统，也极大的促进了电子商务创业的形成。&lt;/p&gt;&lt;p&gt;现在做网站的应该都知道，现在难的并不是做一个网站，目前中国的网站数量可以说数不胜数，&lt;/p&gt;&lt;p&gt;至于具体多少我不清楚，但是我可以这么描述，我有一个小站点，一天的ip数也有1万多，可是在&lt;/p&gt;&lt;p&gt;中国站长统计里面还是好几万名的排名，加上多少不用站长统计的，这个数量我真的很难想象。&lt;/p&gt;&lt;p&gt;时间不早了，该休息了呵呵，如果有什么说的不对的地方，欢迎大家指正！&lt;/p&gt; &lt;img src="http://www.cnblogs.com/126163/aggbug/1885993.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/11/23/1885993.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/08/23/1806097.html</id><title type="text">给大家发一款博客群发工具，方便大家提高网站的外链</title><summary type="text">目前网上存在了很多的博客群发工具，不过好多都是收费的，所以让一些小站长就自动放弃了，因为我也是个小站的站长，所以苦于这个，没办法，只能自己发奋，自己写了个，先放在这里供大家下载！博客群发下载 据我了解，目前市面上流行的博客群发的软件一般都是VB6.0之类的写的，vb6.0这种东西我接触过，但是感觉写起来有些麻烦，所以就用.net写了一个，反正大家能用就可以了！</summary><published>2010-08-22T18:19:00Z</published><updated>2010-08-22T18:19:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/08/23/1806097.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/08/23/1806097.html"/><content type="html">&lt;p&gt;目前网上存在了很多的博客群发工具，不过好多都是收费的，所以让一些小站长就自动放弃了，&lt;/p&gt;&lt;p&gt;因为我也是个小站的站长，所以苦于这个，没办法，只能自己发奋，自己写了个，先放在这里供大家下载！&lt;/p&gt;&lt;p&gt;&lt;a title="博客群发下载" href="http://files.cnblogs.com/126163/blogs.rar"&gt;博客群发下载&lt;/a&gt;&amp;nbsp; &lt;br /&gt;据我了解，目前市面上流行的博客群发的软件一般都是VB6.0之类的写的，vb6.0这种东西我接触过，但是感觉写起来有些麻烦，所以就用.net写了一个，反正大家能用就可以了！&lt;/p&gt; &lt;img src="http://www.cnblogs.com/126163/aggbug/1806097.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/08/23/1806097.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/08/13/1798620.html</id><title type="text">做网站与养孩子的对比</title><summary type="text">1.恋爱初期，对爱情充满了幻想，幻想自己的爱情，以后得生活是多么的美好！ 网站策划期，对自己网站的前景同样也充满了幻想与信心，感觉这个网站做下来肯定会受到网友的喜欢！</summary><published>2010-08-12T16:17:00Z</published><updated>2010-08-12T16:17:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/08/13/1798620.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/08/13/1798620.html"/><content type="html">&lt;p&gt;首先我要在此声明我还没有孩子哈哈，但是通过对周围朋友的对比与我自己在父母的养育下成长的过程，结合自己做网站的过程，感觉做网站与养孩子有着那么多的相似之处啊！&lt;/p&gt;&lt;p&gt;1.恋爱初期，对爱情充满了幻想，幻想自己的爱情，以后得生活是多么的美好！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;网站策划期，对自己网站的前景同样也充满了幻想与信心，感觉这个网站做下来肯定会受到网友的喜欢！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.孩子的诞生，代表着两个人爱情的结晶，是对之前恋爱的一个阶段性的结果，从此父母将希望寄托于小孩身上！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 网站上线的这一刻，激动的一般都一夜不睡觉(当然了，我说的是个人的第一个站)！&lt;br /&gt;&lt;br /&gt;&lt;div id="mywebsite1"&gt;吉祥物_风水吉祥物_宝宝起名_星座配对_星座查询_生肖守护神_砭石功效与作用-中国福缘阁风水吉祥物&lt;a href="http://www.56fuyuan.com/"&gt;http://www.56fuyuan.com/&lt;/a&gt;&lt;/div&gt;&lt;script&gt;document.getElementById('mywebsite1').style.display='none';&lt;/script&gt;3.孩子满一个月，要喝满月酒。 &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 网站上线不到一个月吧，多少也都有些庆祝的，比如喝点啤酒等！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.孩子从满月到上学，父母天天要看着，一时不看恐怕都会出问题！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 网站上线的几个月内的时间里，大多都是天天看着自己的网站，&lt;br /&gt;&lt;br /&gt;一来：是怕自己网站运行的不稳定！&lt;/p&gt;&lt;p&gt;二来：新增的站点总要多添加些新闻，每天站长都在努力，这个事情可以比如成给孩子换尿布！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5.孩子上学到大学的这个过程&lt;/p&gt;&lt;p&gt;网站在站长的不断努力下，新闻数量也开始渐渐的多了起来，评论新闻、投稿等的越来越多，慢慢的不用像刚开始的时候操心了！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6.孩子长到18岁了，可以自力更生了！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 经过站长前期长时间的努力，网站具备了自力更生的能力！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div id="mywebsite"&gt;吉祥物_风水吉祥物_宝宝起名_星座配对_星座查询_生肖守护神_砭石功效与作用-中国福缘阁风水吉祥物&lt;a href="http://www.56fuyuan.com/"&gt;http://www.56fuyuan.com/&lt;/a&gt;&lt;/div&gt;&lt;script&gt;document.getElementById('mywebsite').style.display='none';&lt;/script&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1798620.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/08/13/1798620.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/09/1754953.html</id><title type="text">C#调用ICTCLAS30</title><summary type="text">SharpICTCLAS虽说是开源的，但07年以后就没有人再进行维护，跑搜狗的语料问题不少，就连C#版本的作者也承认有不少问题。想得到更为准确的分词结果，还是研究SharpICTCLAS3.0，也就是ICTCLAS 2009版。dll 文件不是C#开发的，所以引入要通过DllImport先自己写了个类代码using System;using System.Collections...</summary><published>2010-06-09T09:56:00Z</published><updated>2010-06-09T09:56:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754953.html"/><content type="html">&lt;p&gt;SharpICTCLAS虽说是开源的，但07年以后就没有人再进行维护，跑搜狗的语料问题不少，就连C#版本的作者也承认有不少问题。&lt;/p&gt;&lt;p&gt;想得到更为准确的分词结果，还是研究SharpICTCLAS3.0，也就是ICTCLAS 2009版。dll 文件不是C#开发的，所以引入要通过DllImport&lt;/p&gt;&lt;p&gt;先自己写了个类&lt;/p&gt;&lt;p&gt;代码&lt;/p&gt;&lt;p&gt;using System;&lt;/p&gt;&lt;p&gt;using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;using System.Text;&lt;/p&gt;&lt;p&gt;using System.Runtime.InteropServices;&lt;/p&gt;&lt;p&gt;namespace test&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;[StructLayout(LayoutKind.Explicit)]&lt;/p&gt;&lt;p&gt;public struct result_t&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;[FieldOffset(0)]&lt;/p&gt;&lt;p&gt;public int start;&lt;/p&gt;&lt;p&gt;[FieldOffset(4)]&lt;/p&gt;&lt;p&gt;public int length;&lt;/p&gt;&lt;p&gt;[FieldOffset(8)]&lt;/p&gt;&lt;p&gt;public int sPos;&lt;/p&gt;&lt;p&gt;[FieldOffset(12)]&lt;/p&gt;&lt;p&gt;public int sPosLow;&lt;/p&gt;&lt;p&gt;[FieldOffset(16)]&lt;/p&gt;&lt;p&gt;public int POS_id;&lt;/p&gt;&lt;p&gt;[FieldOffset(20)]&lt;/p&gt;&lt;p&gt;public int word_ID;&lt;/p&gt;&lt;p&gt;[FieldOffset(24)]&lt;/p&gt;&lt;p&gt;public int word_type;&lt;/p&gt;&lt;p&gt;[FieldOffset(28)]&lt;/p&gt;&lt;p&gt;public int weight;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;class ICTCLAS30&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;const string path = @"ICTCLAS30.dll";&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_Init")]&lt;/p&gt;&lt;p&gt;public static extern bool Init(String sInitDirPath);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_ParagraphProcess")]&lt;/p&gt;&lt;p&gt;public static extern String ParagraphProcess(String sParagraph, int bPOStagged);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_Exit")]&lt;/p&gt;&lt;p&gt;public static extern bool Exit();&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_ImportUserDict")]&lt;/p&gt;&lt;p&gt;public static extern int ImportUserDict(String sFilename);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_FileProcess")]&lt;/p&gt;&lt;p&gt;public static extern bool FileProcess(String sSrcFilename, String sDestFilename, int bPOStagged);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_FileProcessEx")]&lt;/p&gt;&lt;p&gt;public static extern bool FileProcessEx(String sSrcFilename, String sDestFilename);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_GetParagraphProcessAWordCount")]&lt;/p&gt;&lt;p&gt;public static extern int GetParagraphProcessAWordCount(String sParagraph);&lt;/p&gt;&lt;p&gt;//ICTCLAS_GetParagraphProcessAWordCount&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_ParagraphProcessAW")]&lt;/p&gt;&lt;p&gt;public static extern void ParagraphProcessAW(int nCount, [Out, MarshalAs(UnmanagedType.LPArray)] result_t[] result);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_AddUserWord")]&lt;/p&gt;&lt;p&gt;public static extern int AddUserWord(String sWord);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_SaveTheUsrDic")]&lt;/p&gt;&lt;p&gt;public static extern int SaveTheUsrDic();&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_DelUsrWord")]&lt;/p&gt;&lt;p&gt;static extern int DelUsrWord(String sWord);&lt;/p&gt;&lt;p&gt;public ICTCLAS30()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;调用：&lt;/p&gt;&lt;p&gt;代码&lt;/p&gt;&lt;p&gt;if (!ICTCLAS30.Init(null))&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;System.Console.WriteLine("Init ICTCLAS failed!");&lt;/p&gt;&lt;p&gt;return;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;System.Console.WriteLine("Init ICTCLAS Success!");&lt;/p&gt;&lt;p&gt;String pResult;&lt;/p&gt;&lt;p&gt;pResult = ICTCLAS30.ParagraphProcess("点击下载超女纪敏佳深受观众喜爱。禽流感爆发在非典之后。", 1);&lt;/p&gt;&lt;p&gt;System.Console.WriteLine(pResult);&lt;/p&gt;&lt;p&gt;ICTCLAS30.Exit();&lt;/p&gt;&lt;p&gt;注：&lt;/p&gt;&lt;p&gt;使用的时候把ICTCLAS30.dll，Configure.xml和Data文件夹copy到程序exe运行的位置，否则需要制定他们的位置。&lt;/p&gt;&lt;p&gt;如何把pResult搞成昨天博文里的wordResult格式还是个问题。还需要好好研究。。。。&lt;/p&gt;&lt;p&gt;附上：官方网站的C#调用示例&lt;/p&gt;&lt;p&gt;代码&lt;/p&gt;&lt;p&gt;using System;&lt;/p&gt;&lt;p&gt;using System.IO;&lt;/p&gt;&lt;p&gt;using System.Runtime.InteropServices;&lt;/p&gt;&lt;p&gt;namespace win_csharp&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;[StructLayout(LayoutKind.Explicit)]&lt;/p&gt;&lt;p&gt;public struct result_t&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;[FieldOffset(0)]&lt;/p&gt;&lt;p&gt;public int start;&lt;/p&gt;&lt;p&gt;[FieldOffset(4)]&lt;/p&gt;&lt;p&gt;public int length;&lt;/p&gt;&lt;p&gt;[FieldOffset(8)]&lt;/p&gt;&lt;p&gt;public int POS_id;&lt;/p&gt;&lt;p&gt;[FieldOffset(12)]&lt;/p&gt;&lt;p&gt;public int word_ID;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// Class1 的摘要说明。&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;class Class1&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;const string path = @"ICTCLAS30.dll";&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_Init")]&lt;/p&gt;&lt;p&gt;public static extern bool ICTCLAS_Init(String sInitDirPath);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_ParagraphProcess")]&lt;/p&gt;&lt;p&gt;public static extern String ICTCLAS_ParagraphProcess(String sParagraph, int bPOStagged);&lt;/p&gt;&lt;p&gt;[DllImport(path, CharSet = CharSet.Ansi, EntryPoint = "ICTCLAS_Exit")]&lt;/p&gt;&lt;p&gt;public static extern bool ICTCLAS_Exit();&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// 应用程序的主入口点。&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;[STAThread]&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;//&lt;/p&gt;&lt;p&gt;// TODO: 在此处添加代码以启动应用程序&lt;/p&gt;&lt;p&gt;//&lt;/p&gt;&lt;p&gt;if (!ICTCLAS_Init(null))&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;System.Console.WriteLine("Init ICTCLAS failed!");&lt;/p&gt;&lt;p&gt;return;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;System.Console.WriteLine("Init ICTCLAS Success!");&lt;/p&gt;&lt;p&gt;String pResult;&lt;/p&gt;&lt;p&gt;pResult = ICTCLAS_ParagraphProcess("点击下载超女纪敏佳深受观众喜爱。禽流感爆发在非典之后。", 1);&lt;/p&gt;&lt;p&gt;System.Console.WriteLine(pResult);&lt;/p&gt;&lt;p&gt;ICTCLAS_Exit();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1754953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/09/1754953.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/09/1754949.html</id><title type="text">C#给RichTextBox添加查找画面</title><summary type="text">/*--整理者：淘宝网商城正品--整理时间：2010/06/08--内容：C#如何给RichTextBox添加查找画面：*///★★★★★★★★★案例分析:★★★★★★★★&amp;#...</summary><published>2010-06-09T09:52:00Z</published><updated>2010-06-09T09:52:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754949.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754949.html"/><content type="html">&lt;p&gt;/*&lt;/p&gt;&lt;p&gt;--整理者：&lt;a href="http://www.csdnit.com/" target="_blank"&gt;淘宝网商城正品&lt;/a&gt;&lt;/p&gt;&lt;p&gt;--整理时间：2010/06/08&lt;/p&gt;&lt;p&gt;--内容：C#如何给RichTextBox添加查找画面：&lt;/p&gt;&lt;p&gt;*/&lt;/p&gt;&lt;p&gt;//&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;案例分析:&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&lt;/p&gt;&lt;p&gt;//环境：C#&lt;/p&gt;&lt;p&gt;//1 我有一个RichTextBox控件，里面有很多的内容，我想按下按钮(ctrl+F)弹出一个查找画面&lt;/p&gt;&lt;p&gt;//2 在查找画面中我输入一个值进行查找，可以对父页面中RichTextBox中的内容进行查询&lt;/p&gt;&lt;p&gt;//3 对查找出来的内容，以特殊的颜色标示出来&lt;/p&gt;&lt;p&gt;//&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;实现方法:&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;免费开源的超强全功能版asp.net购物系统&amp;nbsp; 下载地址:&lt;a href=http://www.csdnit.com/ target="_blank"&gt;&lt;font color="#8e1a10"&gt;淘宝网购物&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 演示地址:&lt;a href="http://www.56fuyuan.com/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;http://www.56fuyuan.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div id="c_jquery_test" style="display: none"&gt;&lt;/div&gt;&lt;p&gt;&lt;script type="text/javascript"&gt;    if ($ != jQuery) {        $ = jQuery.noConflict();    }&lt;/script&gt;&lt;/p&gt;&lt;p&gt;//第一步：在richTextBox1_KeyDown事件中加上一下代码：&lt;/p&gt;&lt;p&gt;if (e.Control &amp;amp;&amp;amp; e.KeyCode == Keys.F)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;//选中所有的RichTextBox的内容&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectAll();&lt;/p&gt;&lt;p&gt;//改变RichTextBox的选中的字体颜色&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionColor = Color.Black;&lt;/p&gt;&lt;p&gt;//改变RichTextBox的选中的字体的背景颜色&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionBackColor = Color.Moccasin;&lt;/p&gt;&lt;p&gt;//选中richTextBox从0开始的0个字符&lt;/p&gt;&lt;p&gt;this.richTextBox1.Select(0, 0);&lt;/p&gt;&lt;p&gt;//把滚动条回滚到焦点所在位置&lt;/p&gt;&lt;p&gt;this.richTextBox1.ScrollToCaret();&lt;/p&gt;&lt;p&gt;//弹出查找画面&lt;/p&gt;&lt;p&gt;frmLookFor frm = new frmLookFor();&lt;/p&gt;&lt;p&gt;frm.Show(this);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//第二步：在查找画面中&lt;/p&gt;&lt;p&gt;//变量定义和对象实例化&lt;/p&gt;&lt;p&gt;public static string strKey = "";&lt;/p&gt;&lt;p&gt;private int index = 0;&lt;/p&gt;&lt;p&gt;private int k = 1;&lt;/p&gt;&lt;p&gt;strKey = this.textBox1.Text;&lt;/p&gt;&lt;p&gt;if (strKey == "")&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//フォーム初期化&lt;/p&gt;&lt;p&gt;frmRulerChk frm1 = (frmRulerChk)this.Owner;//为了在子窗体中得到主窗体的东西&lt;/p&gt;&lt;p&gt;//指定の文字列を検索&lt;/p&gt;&lt;p&gt;int m = System.Text.RegularExpressions.Regex.Matches(((RichTextBox)frm1.Controls["richTextBox1"]).Text, strKey, System.Text.RegularExpressions.RegexOptions.IgnoreCase).Count;&lt;/p&gt;&lt;p&gt;if (((RichTextBox)frm1.Controls["richTextBox1"]).Text != "")&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (k &amp;lt;= m)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;while ((index = ((RichTextBox)frm1.Controls["richTextBox1"]).Find(strKey, index, RichTextBoxFinds.None)) &amp;gt;= 0)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;//选択した文字列の色&lt;/p&gt;&lt;p&gt;((RichTextBox)frm1.Controls["richTextBox1"]).SelectionColor = Color.Red;&lt;/p&gt;&lt;p&gt;//选択した文字列のBackColor&lt;/p&gt;&lt;p&gt;((RichTextBox)frm1.Controls["richTextBox1"]).SelectionBackColor = Color.Blue;&lt;/p&gt;&lt;p&gt;//フォーカス移动&lt;/p&gt;&lt;p&gt;((RichTextBox)frm1.Controls["richTextBox1"]).Focus();&lt;/p&gt;&lt;p&gt;//文字列选択&lt;/p&gt;&lt;p&gt;((RichTextBox)frm1.Controls["richTextBox1"]).Select(index, 5);&lt;/p&gt;&lt;p&gt;//スクロールバーはフォーカスのところへ移动&lt;/p&gt;&lt;p&gt;((RichTextBox)frm1.Controls["richTextBox1"]).ScrollToCaret();&lt;/p&gt;&lt;p&gt;index++;&lt;/p&gt;&lt;p&gt;k++;&lt;/p&gt;&lt;p&gt;if (k == m)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;MessageBox.Show("検索の开始位置に达しました", "注意", MessageBoxButtons.OK, MessageBoxIcon.Information);&lt;/p&gt;&lt;p&gt;index = 0;&lt;/p&gt;&lt;p&gt;k = 1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;return;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//&amp;#9733;&amp;#9733;如果要实现查询画面只弹出一个并且最小化的把状态改为正常状态:&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&lt;/p&gt;&lt;p&gt;//步骤一中代码改为：&lt;/p&gt;&lt;p&gt;//实例化要打开的窗体&lt;/p&gt;&lt;p&gt;public static frmLookFor frmlook = null;&lt;/p&gt;&lt;p&gt;if (e.Control &amp;amp;&amp;amp; e.KeyCode == Keys.F)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (frmRulerChk.frmlook == null)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectAll();&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionColor = Color.Black;&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionBackColor = Color.Moccasin;&lt;/p&gt;&lt;p&gt;this.richTextBox1.Select(0, 0);&lt;/p&gt;&lt;p&gt;this.richTextBox1.ScrollToCaret();&lt;/p&gt;&lt;p&gt;frmRulerChk.frmlook = new frmLookFor();&lt;/p&gt;&lt;p&gt;frmRulerChk.frmlook.Show(this);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;try&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (frmRulerChk.frmlook.WindowState == FormWindowState.Minimized)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;frmRulerChk.frmlook.WindowState = FormWindowState.Normal;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;frmRulerChk.frmlook.Activate();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;catch&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectAll();&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionColor = Color.Black;&lt;/p&gt;&lt;p&gt;this.richTextBox1.SelectionBackColor = Color.Moccasin;&lt;/p&gt;&lt;p&gt;this.richTextBox1.Select(0, 0);&lt;/p&gt;&lt;p&gt;this.richTextBox1.ScrollToCaret();&lt;/p&gt;&lt;p&gt;frmLookFor frm = new frmLookFor();&lt;/p&gt;&lt;p&gt;frm.Show(this);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//&amp;#9733;&amp;#9733;如果想要改运行的窗体在任务栏中不显示图标:&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&amp;#9733;&lt;/p&gt;&lt;p&gt;//更改属性：ShowInTaskbar = false;&lt;/p&gt;&lt;p&gt;//注：在查找画面关闭的时候一定要加上这句代码：&lt;/p&gt;&lt;p&gt;frmRulerChk.frmlook = null;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1754949.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/09/1754949.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/09/1754945.html</id><title type="text">C# 4.0四大新特性代码示例与解读</title><summary type="text">免费开源的全功能版asp.net购物系统 下载地址:淘宝网购物 演示地址:http://www.56fuyuan.com/在之前的文章中，我们曾介绍过C#的历史及C# 4.0新增特性，包括：dynamic、 命名和可选参数、动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C# 4.0中的四个比较重要的特性。1．dynamic ExpandoObject熟悉js的朋友都知道js...</summary><published>2010-06-09T09:48:00Z</published><updated>2010-06-09T09:48:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754945.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754945.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;免费开源的全功能版asp.net购物系统&amp;nbsp; 下载地址:&lt;a href="http://www.csdnit.com/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;淘宝网购物&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 演示地址:&lt;a href="http://www.56fuyuan.com/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;http://www.56fuyuan.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div id="c_jquery_test" style="display: none"&gt;&lt;/div&gt;&lt;p&gt;&lt;script type="text/javascript"&gt;    if ($ != jQuery) {        $ = jQuery.noConflict();    }&lt;/script&gt;&lt;/p&gt;&lt;p&gt;在之前的文章中，我们曾介绍过C#的历史及C# 4.0新增特性，包括：dynamic、 命名和可选参数、&lt;/p&gt;&lt;p&gt;动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C# 4.0中的四个比较重要的特性。&lt;/p&gt;&lt;p&gt;1．dynamic ExpandoObject&lt;/p&gt;&lt;p&gt;熟悉js的朋友都知道js可以这么写 ：&lt;/p&gt;&lt;p&gt;var t = new Object();&amp;nbsp; t.Abc = &amp;#8216;something&amp;#8217;;&amp;nbsp; t.Value = 243;&lt;/p&gt;&lt;p&gt;现在这个js动态语言的特性，我们也可以在c#中使用了，前提是将一个变量声明为ExpandoObject类型。如下例：&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&amp;nbsp; dynamic t = new ExpandoObject();&amp;nbsp; t.Abc = "abc";&lt;/p&gt;&lt;p&gt;t.Value = 10000;&lt;/p&gt;&lt;p&gt;Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);&lt;/p&gt;&lt;p&gt;Console.ReadLine();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;C# 4.0中新增了一个命名空间System.Dynamic来实现对此应用的支持，这种用法的意义何在，现在我还不太清楚，&lt;/p&gt;&lt;p&gt;也是是C#向动态语言过渡的一种试探吧。关于动态语言请参考《5月编程语言排行榜：动态语言的前世今生》。&lt;/p&gt;&lt;p&gt;2．泛型自动转换&lt;/p&gt;&lt;p&gt;在C# 4.0之前下面的代码是不可以编译通过的&lt;/p&gt;&lt;p&gt;IEnumerable&amp;lt;object&amp;gt; objs = new List&amp;lt;string&amp;gt; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "I'm 0","I'am 1","I'am 2"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;是在C# 4.0中这种声明是允许的，不过也仅限于泛型接口，泛型类型的类似做法是不允许的，如下代码是有编译错误的&lt;/p&gt;&lt;p&gt;List&amp;lt;object&amp;gt; objList = new List&amp;lt;string&amp;gt; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "I'am 0","I'am 1","I'am 2"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;p&gt;3．方法参数之可选参数&lt;/p&gt;&lt;p&gt;如下方法声明的语法&lt;/p&gt;&lt;p&gt;static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2")&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;这个方法有三个参数第一个是必选参数，第二个和第三个是可选参数，他们都有一个默认值。&lt;/p&gt;&lt;p&gt;这种形式对固定参数的几个方法重载很有用。如下调用：&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;DoSomething(1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DoSomething(1, "葫芦");&lt;/p&gt;&lt;p&gt;DoSomething(1, "葫芦", "黄瓜");&lt;/p&gt;&lt;p&gt;Console.ReadLine();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;也许你会想到，假如我有一个和可选参数方法不选某个参数相同的方法签名的方法时，C#会怎么处理呢，我们看下下面的代码&lt;/p&gt;&lt;p&gt;static void DoSomething(int notOpArg, string arg)&lt;/p&gt;&lt;p&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("arg1 = {0}", arg);&amp;nbsp; }&lt;/p&gt;&lt;p&gt;这里又重载了一个DoSomething这个方法有两个参数，但是没有可选参数，&lt;/p&gt;&lt;p&gt;实验证明调用DoSomething(1,&amp;#8221;arg&amp;#8221;)时会优先执行没有可选参数的方法。&lt;/p&gt;&lt;p&gt;4．方法参数之命名参数&lt;/p&gt;&lt;p&gt;命名参数让我们可以在调用方法时指定参数名字来给参数赋值，这种情况下可以忽略参数的顺序。如下方法声明：&lt;/p&gt;&lt;p&gt;static void DoSomething(int height, int width, string openerName, string scroll)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;我们可以这样来调用上面声明的方法&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;DoSomething( scroll : "no",height : 10, width : 5, openerName : "windowname");&lt;/p&gt;&lt;p&gt;Console.ReadLine();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;很显然的这是一个语法糖，但是在方法参数很多的情况下很有意义，可以增加代码的可读性。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1754945.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/09/1754945.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/09/1754941.html</id><title type="text">说说ASP.NET MVC应用程序请求生命周期</title><summary type="text">当一个ASP.NET MVC应用程序提出请求，为了响应请求，包含一些请求执行流程步骤！ 在ASP.NET MVC应用程序Http request 和Http response 过程中，主要包含8个步骤: 1）RouteTable(路由表)的创建 2）UrlRoutingModule 请求拦截 3）Routing engine 确定route 4）route handler 创建相关的IHttpHa...</summary><published>2010-06-09T09:45:00Z</published><updated>2010-06-09T09:45:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754941.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/09/1754941.html"/><content type="html">&lt;p&gt;当一个ASP.NET MVC应用程序提出请求，为了响应请求，包含一些请求执行流程步骤！ 在ASP.NET MVC应用程序Http request&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和Http response 过程中，主要包含8个步骤:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）RouteTable(路由表)的创建&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）UrlRoutingModule 请求拦截&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）Routing engine 确定route&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4）route handler 创建相关的IHttpHandler实例&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5）IHttpHandler实例确定Controller(控制器）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6）Controller执行&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7）一个视图引擎创建&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8) 视图呈现&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 主要流程图如下:&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）RouteTable的创建&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RouteTable的创建发生在mvc应用程序的启动 或者web应用程序池的重启！通常的asp.net程序，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个页面请求对应磁盘上的一个页面！如（&lt;a href="http://localhost/index.aspx" target="_blank"&gt;http://localhost/index.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 对应到服务器磁盘上的文件index.aspx）index.aspx实际上是一个类，由IHttpHandler创建实例化。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IHttpHandler包含一个&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessRequest方法，负责响应页面输出！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是mvc application 是不同的，每一个请求映射到route,route 定义在route table,在应用程序启动时创建!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RouteTable的在应用程序的具体使用如下&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MvcApplication :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.HttpApplication &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void RegisterRoutes(RouteCollection routes)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routes.IgnoreRoute("{resource}.axd/{*pathInfo}");&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routes.MapRoute(&amp;nbsp;&amp;nbsp;&amp;nbsp; "Default",&amp;nbsp; // Route name&amp;nbsp;&amp;nbsp;&amp;nbsp; "{controller}/{action}/{id}", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // URL with parameters&amp;nbsp;&amp;nbsp;&amp;nbsp; new { controller = "Home", action = "Index", id = "" }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Parameter defaults&amp;nbsp;&amp;nbsp;&amp;nbsp; );&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routes.MapRoute(&amp;nbsp;&amp;nbsp; "Account",&amp;nbsp; // Route name&amp;nbsp;&amp;nbsp; "{controller}/{action}/{id}",&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // URL with parameters&amp;nbsp;&amp;nbsp; new { controller = "Account", action = "LogOn", id = "" } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Parameter defaults&amp;nbsp;&amp;nbsp; );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Application_Start()&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterRoutes(RouteTable.Routes);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）UrlRoutingModule 请求拦截&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每一个Http 请求 都被UrlRoutingModule拦截，UrlRoutingModule提供了当前的HttpContext的&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routingengine(路由引擎）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 。HttpContext实例包含当前请求的所有数据。UrlRoutingModule控制着routing engine，&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 提供了HttpContext数据到routing engine! UrlRoutingModule实现了IHttpModule接口，在web.config 文件进行&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 了注册！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UrlRoutingModule 具体的数据结构如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class UrlRoutingModule : IHttpModule&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 主要的 Methods&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected virtual void Init(HttpApplication application);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnApplicationPostMapRequestHandler(object sender, EventArgs e);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnApplicationPostResolveRequestCache(object sender, EventArgs e);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual void PostMapRequestHandler(HttpContextBase context);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual void PostResolveRequestCache(HttpContextBase context); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void IHttpModule.Init(HttpApplication application);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Properties&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public RouteCollection RouteCollection { get; set; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UrlRoutingModule 在WebConfig的注册&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpModules&amp;gt; &amp;lt;add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.Routing, Version=3.5.0.0,&amp;nbsp; Culture=neutral,PublicKeyToken=31BF3856AD364E35"/&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpModules&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）Routing engine 确定route&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routing engine基于当前HttpContext确定Route的处理。routing engine 指出route table里面匹配的route ,并&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在 IRouteHandler实例创建route处理！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4）route handler 创建相关的IHttpHandler实例在route table里，每一个route 都与一个IHttpHandler对应。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IHttpHandler基于当前的HttpContext数据负责创建一个Controller(控制器）！IHttpHandler是由当前活动的&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRouteHandler的GetHttpHandler所创建！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 具体的细节如下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public interface IRouteHandler &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Methods&amp;nbsp; IHttpHandler GetHttpHandler(RequestContext&amp;nbsp;&amp;nbsp;&amp;nbsp; requestContext);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5）IHttpHandler实例确定Controller(控制器）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在MVC应用程序中，MvcHandler实现了IHttpHandler，Controller实例，是基于所输入的HttpContext&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和Url参数 与route 对应的，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ControllerFactory 创建一个controller，ControllerContext包含上下文数据，传入到controller的Excute方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 触发 controller的逻辑处理！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MvcHandler主要有一个ControllerBuilder&amp;nbsp; _controllerBuilder字段;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 具体细节如下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 主要的Fields&amp;nbsp; private ControllerBuilder _controllerBuilder;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ControllerBuilder类主要有一个方法GetControllerFactory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class ControllerBuilder &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IControllerFactory GetControllerFactory();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 通过实现IControllerFactory 工厂 创建一个Controller&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6）Controller执行&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所有的controller 逻辑调用执行时，actions请求被执行！当controller的逻辑被执行时，会返回一个 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ActionResult。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个ActionResult实例，会触发呈现一个View(视图)，当触发发生时，一个视图引擎被创建，进行进一 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 步的处&amp;nbsp;&amp;nbsp; 理&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7）一个视图引擎创建&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 视图引擎实例会创建一个IView接口实例，返回一个ViewEngineResult实例，&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8) 视图呈现&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IView实例编译请求视图，提供Render方法调用的数据！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;免费开源的全功能asp.net购物系统&amp;nbsp; 下载地址:&lt;a href="http://www.csdnit.com/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;淘宝网购物&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 演示地址:&lt;a href="http://www.56fuyuan.com/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;http://www.56fuyuan.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div id="c_jquery_test" style="display: none"&gt;&lt;/div&gt;&lt;p&gt;&lt;script type="text/javascript"&gt;    if ($ != jQuery) {        $ = jQuery.noConflict();    }&lt;/script&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1754941.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/09/1754941.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/08/1753640.html</id><title type="text">详解C#委托，事件与回调函数</title><summary type="text">.Net编程中最经常用的元素，事件必然是其中之一。无论在ASP.NET还是WINFrom开发中，窗体加载(Load),绘制(Paint),初始化(Init)等等。“protected void Page_Load(object sender, EventArgs e)”这段代码相信没有人不熟悉的。细心一点一定会发现，非常多的事件方法都是带了“object s...</summary><published>2010-06-07T17:43:00Z</published><updated>2010-06-07T17:43:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/08/1753640.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/08/1753640.html"/><content type="html">&lt;p&gt;　.Net编程中最经常用的元素，事件必然是其中之一。无论在ASP.NET还是WINFrom开发中，窗体加载(Load),绘制(Paint),初始化(Init)等等。&lt;/p&gt;&lt;p&gt;&amp;#8220;protected void Page_Load(object sender, EventArgs e)&amp;#8221;这段代码相信没有人不熟悉的。细心一点一定会发现，非常多的事件方法都是带了&amp;#8220;object sender, EventArgs e&amp;#8221;这两个参数。这是不是和委托非常相似呢？&lt;/p&gt;&lt;p&gt;一、委托（有些书中也称为委派）&lt;/p&gt;&lt;p&gt;委托是什么呢？这个名字的意思已经赋予了我们想象的空间，你是编程的，你现在正在写一个ASP.NET网页，而JS是你不熟悉的，于是你委托你的一位同事来帮助你完成JS部分。这就是委托，把你所不能做的事情交给其他人去做。而怎么知道是哪个人去做呢？当然是要知道名字！而为了区别名字一样的不同人，因此，需要描述一个特征。&lt;/p&gt;&lt;p&gt;在C#中，委托的作用是这样描述的：委托就像一个函数的指针，在程序运行时可以使用它们来调用不同的函数。这个其实和你委托同事完成 JS代码一样。如果有两位同事可以做这件事情，他们只要做的结果能够满足你的需求（就像一个接口），尽管他们做的过程不一样，并且作出的效果也不一样，但是，能够达到你的要求就可以了。&lt;/p&gt;&lt;p&gt;1、简单的委托&lt;/p&gt;&lt;p&gt;那委托需要承载哪些信息呢？首先，它存储了方法名，还有参数列表(方法签名),以及返回的类型。比如：&lt;/p&gt;&lt;p&gt;delegate string/*返回类型*/ ProcessDelegate(int i);&lt;/p&gt;&lt;p&gt;这就是一个委托的定义。蓝色部分是声明委托的关键字，红色部分是返回的类型，而黑色部分是委托的类型名，和一个类名差不多，而()里的就是参数部分。它的意思是，你要使用这个委托来做事情的话，那么，做事情的方法必须满足以下条件：&lt;/p&gt;&lt;p&gt;1、返回类型和委托的返回类型一致，这里是string类型；&lt;/p&gt;&lt;p&gt;2、能且只能有一个参数，并且是int类型。&lt;/p&gt;&lt;p&gt;OK,满足以上两个条件，一切就可以工作了:)&lt;/p&gt;&lt;p&gt;例如：&lt;/p&gt;&lt;p&gt;1 using System;&lt;/p&gt;&lt;p&gt;2 using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;3 using System.Text;&lt;/p&gt;&lt;p&gt;4&lt;/p&gt;&lt;p&gt;5 namespace TestApp&lt;/p&gt;&lt;p&gt;6 {&lt;/p&gt;&lt;p&gt;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 委托&lt;/p&gt;&lt;p&gt;9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public delegate string ProcessDelegate(string s1, string s2);&lt;/p&gt;&lt;p&gt;14&lt;/p&gt;&lt;p&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;/p&gt;&lt;p&gt;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;/p&gt;&lt;p&gt;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&amp;nbsp; 调用方法&amp;nbsp; */&lt;/p&gt;&lt;p&gt;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessDelegate pd = new ProcessDelegate(new Test().Process);&lt;/p&gt;&lt;p&gt;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(pd("Text1", "Text2"));&lt;/p&gt;&lt;p&gt;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;24&lt;/p&gt;&lt;p&gt;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Test&lt;/p&gt;&lt;p&gt;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 方法&lt;/p&gt;&lt;p&gt;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Process(string s1,string s2)&lt;/p&gt;&lt;p&gt;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;35&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1 + s2;&lt;/p&gt;&lt;p&gt;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;38 }输出的结果是:&lt;/p&gt;&lt;p&gt;Text1Tex2&lt;/p&gt;&lt;p&gt;2、泛型委托&lt;/p&gt;&lt;p&gt;泛型的委托，就是然参数的类型不确定,例如代码改写为：&lt;/p&gt;&lt;p&gt;using System;&lt;/p&gt;&lt;p&gt;using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;using System.Text;&lt;/p&gt;&lt;p&gt;namespace TestApp&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// 委托&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;public delegate string ProcessDelegate&amp;lt;T,S&amp;gt;(T s1, S s2);&lt;/p&gt;&lt;p&gt;class Program&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/*&amp;nbsp; 调用方法&amp;nbsp; */&lt;/p&gt;&lt;p&gt;ProcessDelegate&amp;lt;string,int&amp;gt; pd = new ProcessDelegate&amp;lt;string,int&amp;gt;(new Test().Process);&lt;/p&gt;&lt;p&gt;Console.WriteLine(pd("Text1", 100));&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public class Test&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// 方法&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;public string Process(string s1,int s2)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return s1 + s2;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;输出的结果就是：&lt;/p&gt;&lt;p&gt;Text1100&lt;/p&gt;&lt;p&gt;泛型的详细内容不属于本文的介绍范围，这里不加多说了。&lt;/p&gt;&lt;p&gt;二、事件&lt;/p&gt;&lt;p&gt;在某件事情发生时，一个对象可以通过事件通知另一个对象。比如，前台完成了前台界面，他通知你，可以把前台和你开发的程序整合了。这就是一个事件。可以看出事件是在一个时间节点去触发另外一件事情，而另外一件事情怎么去做，他不会关心。就事件来说，关键点就是什么时候，让谁去做。&lt;/p&gt;&lt;p&gt;在C#中，时间定义关键字是event。例如：&lt;/p&gt;&lt;p&gt;event ProcessDelegate ProcessEvent;&lt;/p&gt;&lt;p&gt;整个事件定义方法以及执行过程：&lt;/p&gt;&lt;p&gt;using System;&lt;/p&gt;&lt;p&gt;using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;using System.Text;&lt;/p&gt;&lt;p&gt;namespace TestApp&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// 委托&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;public delegate void ProcessDelegate(object sender, EventArgs e);&lt;/p&gt;&lt;p&gt;class Program&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/*&amp;nbsp; 第一步执行&amp;nbsp; */&lt;/p&gt;&lt;p&gt;Test t = new Test();&lt;/p&gt;&lt;p&gt;/* 关联事件方法，相当于寻找到了委托人 */&lt;/p&gt;&lt;p&gt;t.ProcessEvent += new ProcessDelegate(t_ProcessEvent);&lt;/p&gt;&lt;p&gt;/* 进入Process方法 */&lt;/p&gt;&lt;p&gt;Console.WriteLine(t.Process());&lt;/p&gt;&lt;p&gt;Console.Read();&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;static void t_ProcessEvent(object sender, EventArgs e)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;Test t = (Test)sender;&lt;/p&gt;&lt;p&gt;t.Text1 = "Hello";&lt;/p&gt;&lt;p&gt;t.Text2 = "World";&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public class Test&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;private string s1;&lt;/p&gt;&lt;p&gt;public string Text1&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;get { return s1; }&lt;/p&gt;&lt;p&gt;set { s1 = value; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;private string s2;&lt;/p&gt;&lt;p&gt;public string Text2&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;get { return s2; }&lt;/p&gt;&lt;p&gt;set { s2 = value; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public event ProcessDelegate ProcessEvent;&lt;/p&gt;&lt;p&gt;void ProcessAction(object sender, EventArgs e)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (ProcessEvent == null)&lt;/p&gt;&lt;p&gt;ProcessEvent += new ProcessDelegate(t_ProcessEvent);&lt;/p&gt;&lt;p&gt;ProcessEvent(sender, e);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//如果没有自己指定关联方法，将会调用该方法抛出错误&lt;/p&gt;&lt;p&gt;void t_ProcessEvent(object sender, EventArgs e)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;throw new Exception("The method or operation is not implemented.");&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;void OnProcess()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;ProcessAction(this, EventArgs.Empty);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public string Process()&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;OnProcess();&lt;/p&gt;&lt;p&gt;return s1 + s2;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;感觉到了什么？是不是和代码注入了差不多，相当于是可以用任意符合委托接口(委托确实很像接口)的代码，注入到Process过程。在他返回之前给他赋值。&lt;/p&gt;&lt;p&gt;三、回调函数&lt;/p&gt;&lt;p&gt;打了这么多字，好累啊!&lt;/p&gt;&lt;p&gt;回调函数就是把一个方法的传给另外一个方法去执行。在C#有很多回调函数，比如异步操作的时候。这里先举个例子：&lt;/p&gt;&lt;p&gt;using System;&lt;/p&gt;&lt;p&gt;using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;using System.Text;&lt;/p&gt;&lt;p&gt;namespace TestApp&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// 委托&lt;/p&gt;&lt;p&gt;/// &amp;lt;/summary&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;param name="s2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/p&gt;&lt;p&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/p&gt;&lt;p&gt;public delegate string ProcessDelegate(string s1, string s2);&lt;/p&gt;&lt;p&gt;class Program&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;static void Main(string[] args)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;/*&amp;nbsp; 调用方法&amp;nbsp; */&lt;/p&gt;&lt;p&gt;Test t = new Test();&lt;/p&gt;&lt;p&gt;string r1 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process1));&lt;/p&gt;&lt;p&gt;string r2 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process2));&lt;/p&gt;&lt;p&gt;string r3 = t.Process("Text1", "Text2", new ProcessDelegate(t.Process3));&lt;/p&gt;&lt;p&gt;Console.WriteLine(r1);&lt;/p&gt;&lt;p&gt;Console.WriteLine(r2);&lt;/p&gt;&lt;p&gt;Console.WriteLine(r3);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public class Test&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;public string Process(string s1,string s2,ProcessDelegate process)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return process(s1, s2);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public string Process1(string s1, string s2)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return s1 + s2;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public string Process2(string s1, string s2)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return s1 + Environment.NewLine + s2;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;public string Process3(string s1, string s2)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;return s2 + s1;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;输出结果：&lt;/p&gt;&lt;p&gt;Text1Text2&lt;/p&gt;&lt;p&gt;Text1&lt;/p&gt;&lt;p&gt;Text2&lt;/p&gt;&lt;p&gt;Text2Text1&lt;/p&gt;&lt;p&gt;Process方法调用了一个回调函数，当然这里只执行了回调函数。可以看出，可以把任意一个符合这个委托的方法传递进去，意思就是说这部分代码是可变的。而设计上有一个抽离出可变部分代码的原则，这种用法无疑可以用到那种场合了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.56fuyuan.com/item/181/" target="_blank"&gt;&amp;nbsp;泗滨砭石&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.56fuyuan.com/item/181/" target="_blank"&gt;&amp;nbsp;砭石腰链，&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.56fuyuan.com/item/181/" target="_blank"&gt;&amp;nbsp;砭石浮石，&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.56fuyuan.com/item/181/" target="_blank"&gt;http://www.56fuyuan.com/item/181/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1753640.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/08/1753640.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/126163/archive/2010/06/08/1753639.html</id><title type="text">asp.net、IIS和Web应用程序</title><summary type="text">一个Web应用程序就是一组WebFrom和相关的程序集，而它们位于虚拟目录的树结构中。当机器上一个或者多个Web应用程序运行的时候，机器上会存在两个进程。INTINFO.EXE进程代表着IIS。ISAPI筛选器aspnet_isapi.dll会在该进程中接收所有最终要发送至Web应用程序和服务的HTTP请求，然后应用IIS安全策略并且使用命名管道（named pipe）将请求传输至aspnet...</summary><published>2010-06-07T17:38:00Z</published><updated>2010-06-07T17:38:00Z</updated><author><name>123163</name><uri>http://www.cnblogs.com/126163/</uri></author><link rel="alternate" href="http://www.cnblogs.com/126163/archive/2010/06/08/1753639.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/126163/archive/2010/06/08/1753639.html"/><content type="html">&lt;p&gt;一个Web应用程序就是一组WebFrom和相关的程序集，而它们位于虚拟目录的树结构中。当机器上一个或者多个Web应用程序运行的时候，机器上会存在两个进程。&lt;/p&gt;&lt;p&gt;INTINFO.EXE进程代表着IIS。ISAPI筛选器aspnet_isapi.dll会在该进程中接收所有最终要发送至Web应用程序和服务的HTTP请求，然后应用IIS安全策略并且使用命名管道（named pipe）将请求传输至aspnet_wp.exe进程中。如果在接收到请求的时候，aspnet_wp.exe进程还没有启动，那么aspnet_isapi.dll这个ISAPI筛选器就会负责启动进程并且创建合适的命名管道。&lt;/p&gt;&lt;p&gt;aspnet_wp.exe进程（wp是Woker Process的缩写，即工作者进程）根据Web应用程序或者机器上运行的Web服务创建同等数量的AppDomain。不管机器上运行着多少Web应用程序或者Web服务，它们都在这个进程中被执行的，Web应用程序之间的隔离源于由CLR确保AppDomain之间的隔离。&lt;/p&gt;&lt;p&gt;示意图：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/201006/20100607105339476.jpg" width="400" height="286" /&gt;在IIS6.0中已经没有了命名管道，执行过程也相应的发生了一些变化。asp.net在IIS6.0中使用的多个CLR的工作线程。在Window Server 2003下运行IIS6.0还实现了另外一种架构。在这种情况下，IIS个ASP.NET就在名为w3wp.exe的同一个进程中执行了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.56fuyuan.com/item/188/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;泗滨砭石&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.56fuyuan.com/item/188/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;泗滨浮石&lt;/font&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.56fuyuan.com/item/188/" target="_blank"&gt;&lt;font color="#8e1a10"&gt;泗滨砭石刮痧板&lt;/font&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/126163/aggbug/1753639.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/126163/archive/2010/06/08/1753639.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
