上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页
  2011年11月12日
摘要: 如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。 我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期间,其他想要获取这个Mutex对象的线程都只有等待。 下面这个例子使用了Mutex对象来同步四个线程,主线程等待四个线程的结束,而这四个线程的运行又是与两个Mutex对象相关联的。 其中还用到AutoResetEvent类的对象,可以把它理解为一个信号灯。这里用它的有信号状态来表示一个线程的结束。 阅读全文
posted @ 2011-11-12 23:13 上校 阅读(218) 评论(0) 推荐(0)
摘要: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Collections; namespace ThreadPoolTest { class Program { static void Main(string[] args) 阅读全文
posted @ 2011-11-12 21:59 上校 阅读(371) 评论(0) 推荐(0)
摘要: Timer类:设置一个定时器,定时执行用户指定的函数。 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。 初始化一个Timer对象: Timer timer = new Timer(timerDelegate, s,1000, 1000); // 第一个参数:指定了TimerCallback 委托,表示要执行的方法; // 第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用; // 第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器; 阅读全文
posted @ 2011-11-12 19:03 上校 阅读(227) 评论(0) 推荐(0)
摘要: using System; using System.Threading; public class Cell { int cellContents; // Cell对象里边的内容 bool readerFlag = false; // 状态标志,为true时可以读取,为false则正在写入 public int ReadFromCell() 阅读全文
posted @ 2011-11-12 18:36 上校 阅读(327) 评论(0) 推荐(0)
摘要: 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线程池)来解决; 另一种情况:线程平时都处于休眠状态,只是周期性地被唤醒 这一般使用Timer(定时器)来解决; 阅读全文
posted @ 2011-11-12 16:36 上校 阅读(268) 评论(0) 推荐(0)
  2011年11月10日
摘要: 线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”性质的,希望可以说明白这方面问题的一些概念。 线程池的作用 其实“线程池”就是用来存放“线程”的对象池。 阅读全文
posted @ 2011-11-10 00:28 上校 阅读(366) 评论(0) 推荐(0)
  2011年11月4日
摘要: asp.net应用程序管道处理用户请求时特别强调"时机",对asp.net生命周期的了解多少直接影响我们写页面和控件的效率。对于asp.net mvc,我对它的生命周期兴趣很浓,于是对ASP.NET MVC生命周期提出两个问题: 一个HTTP请求从IIS移交到asp.net运行时,asp.net mvc是在什么时机获得了控制权并对请求进行处理呢?处理过程又是怎样的? 阅读全文
posted @ 2011-11-04 23:43 上校 阅读(453) 评论(0) 推荐(0)
  2011年10月18日
摘要: 防盗链的原理,从图片请求的URL地址上判断是否是我们自己网站上的域名,如果不是,恭喜,你的图片已经被盗链了! 那么我来介绍下图片放盗链的一个方法 首先,添加个httpHandlers请求,WEBCONFIG部分配置节如下: 注意:对应于system.web之下,别添错了哦! 然后添加个class,取名为myhandler继承于IHttpHandler 阅读全文
posted @ 2011-10-18 00:38 上校 阅读(488) 评论(0) 推荐(0)
  2011年10月16日
摘要: 引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态有哪些?以及在C#中你如何使用?如果你不能清楚地回答其中的大部分问题,那么这篇文章就是为你准备的!大纲如下: 1、HTTP概述 1.1、HTTP协议的客户端与服务器的交互 1.2、HTTP消息 1.3、HTTP请求的方法 1.4、HTTP响应的代码 2、抓包分析 3、POST与GET的差异 阅读全文
posted @ 2011-10-16 11:27 上校 阅读(1843) 评论(0) 推荐(0)
  2011年10月14日
摘要: 一个居于ASP.NET MVC Beta的系列入门文章,有朋友提议说写一个示例程序来同步讲解,那样更加容易学习。所以就写选择了写一个Blog程序来作为示例程序。(原来是居于ASP.NET MVC Preview5 的,现在基本修改为ASP.NET MVC Beta的了) 本系列文章可能会是几位朋友来共同完成的。本示例Blog系统同步更新的测试站点:http://4mvcblog.qsh.in/ 文章列表,不定时更新: 阅读全文
posted @ 2011-10-14 11:07 上校 阅读(287) 评论(0) 推荐(1)
  2011年10月13日
摘要: 一双鞋,耐克的6百多;李宁的4百多;特步的3百多;361的2百多;所以,你毕业于一个什么样的大学很重要。 一双鞋,在地摊不过几十元,到了商场、专卖店,会涨到一百甚至几百。所以,你呆在什么地方很重要。 一双鞋,只有合脚并且合意了才能卖出去。所以,沟通了解很重要。 一双鞋,少了一只,是不值钱的。所以,另一半很重要。 一双鞋,样式老的,大多很便宜。所以,更新自己的知识很重要。 一双鞋,积压多年,只能打折处理。所以,碰到合适的就结婚吧。 一双鞋, 有人3、5年如新的,有人不到一年穿烂的。所以,有个好上司很重要 阅读全文
posted @ 2011-10-13 13:42 上校 阅读(204) 评论(0) 推荐(1)
  2011年10月9日
摘要: 在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法。在View中,包含一个类型为HtmlHelper的属性Html,它为我们呈现控件提供了捷径。 我们今天主要来讨论Html.DropDownList的用法,首先从Html.TextBox开始。 Html.TextBox有一个重载方法形式如下: 阅读全文
posted @ 2011-10-09 21:36 上校 阅读(347) 评论(0) 推荐(0)
  2011年10月7日
摘要: 扩展方法是定义在静态类内部的静态方法,开发人员可以像用实例方法那样来使用扩展方法。根据C#的语法规定,实例方法只能通过建立一个实例对象才能调用,不能通过类名来调用,相反的,静态方法只能通过类名来调用。而扩展方法提供了一个新的机制可以在对象实例上调用静态方法。扩展方法主要用于在不改变现有的类型代码下,扩展现有类型的功能。所扩展的功能只限于当前上下文有效,并不会对原有类型的定义的代码产生变化。 阅读全文
posted @ 2011-10-07 22:57 上校 阅读(1137) 评论(0) 推荐(0)
  2011年10月5日
摘要: MVC开发中,因为View文件夹下的web.config文件默认会把任何方法的请求的任何文件,路径都交给 System.Web.HttpNotFoundHandler 去处理.起到Controller统一控制的效果. 阅读全文
posted @ 2011-10-05 01:17 上校 阅读(9901) 评论(8) 推荐(5)
  2011年10月1日
摘要: //创建XML文档 XmlDocument xdc = new XmlDocument(); //创建根元素 XmlElement sprites = xdc.CreateElement("Sprites"); //第一个精灵 XmlElement sprite1 = xdc.CreateElement("Sprite01"); //职业 阅读全文
posted @ 2011-10-01 15:33 上校 阅读(284) 评论(0) 推荐(0)
  2011年9月29日
摘要: 期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了 下载地址 Microsoft Visual Studio 2008 Service Pack 1 (iso) http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61 Visual Studio 2008 Team Foundation Server Service Pack 1(iso) http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d Microsoft .NET Framework 3.5 Service Pack 1 阅读全文
posted @ 2011-09-29 22:23 上校 阅读(193) 评论(0) 推荐(0)
摘要: Dictionary dic = new Dictionary(); foreach (DataRow r in dt.Rows) { string str = Convert.ToString(r["strLogisticsType"]); if (dic.ContainsKey(str)) { continue; } dic.Add(str,str); } 阅读全文
posted @ 2011-09-29 14:34 上校 阅读(294) 评论(0) 推荐(1)
  2011年9月27日
摘要: 阅读全文
posted @ 2011-09-27 23:49 上校 阅读(147) 评论(0) 推荐(0)
摘要: 一、访问者模式简介(Brief Introduction) 表示一个作用于某对象结构中的元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的操作结合可以相对自由地演化。优点是增加新的操作很容易,因为增加一个新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中。 二、解决的问题(What To Solve) 访问者模式的目的是要把处理从数据结构分离出来。如果系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式是个不错的选择,因为访问者模式使的算法操作的增加变的容易。相反,如果系统的数据结构不稳定,易于变化,则此系统就不适合使用访问者模式了。 阅读全文
posted @ 2011-09-27 01:35 上校 阅读(261) 评论(0) 推荐(0)
  2011年9月26日
摘要: 一、解释器模式简介(Brief Introduction) 解释器模式(Interpreter Pattern),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。使用了解释器模式,可以很容易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容易直接编写。 二、解决的问题(What To Solve) 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。 阅读全文
posted @ 2011-09-26 22:58 上校 阅读(281) 评论(0) 推荐(0)
  2011年9月25日
摘要: 享元模式(Flyweight Pattern) ——.NET设计模式系列之十三 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。 阅读全文
posted @ 2011-09-25 23:06 上校 阅读(231) 评论(0) 推荐(0)
摘要: 一、引子   中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。   中介者模式在程序设计中也起到了类似的作用。   二、定义与结构   GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。   当然并不是所有的对象都需要加入“中介”对象。如果对象之间的关系原本一目了然,中介对象的加入便是“画蛇添足”。   来看下中介者模式的组成部分吧。 阅读全文
posted @ 2011-09-25 21:51 上校 阅读(297) 评论(0) 推荐(0)
摘要: 我在《软件设计精要与模式》第19章中介绍了职责链模式在实际项目中的应用,由于引入了该模式,使得对象在职责划分上有了更清晰的结构,然而由于项目场景的诸多限制,总有几分“为模式而模式”的生涩感觉。最近在开发WCF的相关项目时,又一次应用了职责链模式,一方面加深了自己对设计模式的进一步理解,也积累了一些心得,可以与各位分享。 在该项目中,我希望实现对Endpoint的合法性检验,其中对于绑定而言,则包含了许多约束,例如绑定与URI样式的约束,例如绑定与服务契约设计的约束。绑定不同,则向对应的约束也不相同。为了更好地体现Endpoint,我在项目中定义了属于自己的Endpoint类: 阅读全文
posted @ 2011-09-25 19:48 上校 阅读(266) 评论(0) 推荐(0)
  2011年9月24日
摘要: 命令模式(Command Pattern) ——.NET设计模式系列之十七 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。 意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 23:53 上校 阅读(454) 评论(0) 推荐(0)
摘要: 桥接模式(Bridge Pattern) 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 意图 将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 22:07 上校 阅读(358) 评论(0) 推荐(0)
摘要: 单件模式(Singleton Pattern) 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 阅读全文
posted @ 2011-09-24 20:46 上校 阅读(290) 评论(0) 推荐(0)
摘要: 概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 16:45 上校 阅读(288) 评论(2) 推荐(1)
摘要: 组合模式(Composite Pattern) 概述 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 15:25 上校 阅读(268) 评论(0) 推荐(0)
摘要: 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 阅读全文
posted @ 2011-09-24 11:27 上校 阅读(1166) 评论(0) 推荐(0)
摘要: 一、备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。 二、解决的问题(What To Solve) 当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。Originator可以根据保存的Memento信息还原到前一状态。 三、备忘录模式分析(Analysis) 阅读全文
posted @ 2011-09-24 01:06 上校 阅读(343) 评论(0) 推荐(0)
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 27 下一页