上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页
  2011年4月5日
摘要: Linq查询表达式在我们迭代内容前,不会真正进行运算,这叫做延迟执行。这种方式的好处是可以为相同的容器多次应用相同的Linq查询,而始终获得最新的结果。 示例代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestVar{ class Program { //Linq查询的延迟执行示例 static void Main(string[] args) { int[] intAry = new int[] { 1, 2, 3, 4, 5, 6 }; //为. 阅读全文
posted @ 2011-04-05 21:04 辛勤的代码工 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 隐式类型局部变量 C#3.0提供了一个新的关键字var,使用该关键字,编译器会根据用于初始化局部变量的初始值推断出变量的数据类型。 示例代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestVar{ class Program { static void Main(string[] args) { //定义int数组 int[] intAry = new int[] { 1, 2, 3, 4, 5, 6 }; //var varSet = intAry 阅读全文
posted @ 2011-04-05 18:31 辛勤的代码工 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 假设给我们一个泛型对象List<T>,T为int类型,要求我们使用该对象方法FindAll(Predicate<T> match)从中找出该List中的偶数,您如何实现? 说明一下:Predicate<T>是一个泛型委托,它的原型为public delegate bool Predicate<T>(T obj),该委托传入一个T类型对象,经逻辑判断后返回布尔值。委托 可能您首先想到的是用委托实现,实现方法如下: //方法1 static void Method1() { //创建List<int>对象 List<int> 阅读全文
posted @ 2011-04-05 14:38 辛勤的代码工 阅读(606) 评论(1) 推荐(0) 编辑
  2011年4月4日
摘要: 当一个事件被触发时,订阅该事件的方法将在触发该事件的线程中执行。也就是说,订阅该事件的方法在触发事件的线程中同步执行。由此,存在一个问题:如果订阅事件的方法执行时间很长,触发事件的线程被阻塞,长时间等待方法执行完毕。这样,不仅影响后续订阅事件方法的执行,也影响主线程及时响应用户的其他请求。如何处理这个问题呢?讲到此,我想您已经想到了,那就是异步事件调用。 怎样实现异步事件调用呢?如果您对事件比较了解的话,您应该知道事件的本质其实是一种MulticastDelegate(多播委托)。MulticastDelegate类提供了一个GetInvocationList方法,该方法返回此多播委托的委托. 阅读全文
posted @ 2011-04-04 16:46 辛勤的代码工 阅读(8327) 评论(0) 推荐(1) 编辑
摘要: 异步方法 当一个线程调用方法后,直到方法执行完毕,线程才继续执行,这种方法被称为同步方法。然而,有些方法执行时间可能非常长,比如串口操作或访问网络,这样线程被阻塞,而无法响应用户的其他请求。这种情况通常是无法忍受的,所以这时我们应该使用异步方法。 异步方法的原理是,在方法调用前为异步方法指定一个回调函数,方法调用后被线程池中的一个线程接管,执行该方法。主线程立即返回,继续执行其他工作或响应用户请求。如果异步方法执行完毕,回调函数被自动执行,以处理异步方法的调用结果。 如何实现异步方法呢?C#通过异步委托调用BeginInvoke和EndInvoke方法来实现异步方法。BeginInvoke方法 阅读全文
posted @ 2011-04-04 11:17 辛勤的代码工 阅读(6023) 评论(0) 推荐(2) 编辑
摘要: 使用Monitor或Mutex进行同步控制的问题:由于独占访问模型不允许任何形式的并发访问,这样的效率总是不太高。许多时候,应用程序在访问资源时是进行读操作,写操作相对较少。为解决这一问题,C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景。该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据。如果资源未被添加任何读或写操作锁,那么一个且仅有一个线程可对该资源添加写操作锁定,以写入数据。简单的讲就是:读操作锁是共享锁,允许多个. 阅读全文
posted @ 2011-04-04 09:44 辛勤的代码工 阅读(2345) 评论(1) 推荐(1) 编辑
  2011年4月3日
摘要: 考虑这样的一个场景:一个停车场的只含一定数量的停车位,只有当停车场中还有空位时,停车场的入口才会打开。C#提供了Semaphore类来处理这种场景。Semaphore类可以在构造时指定资源数量,使用WaitOne方法等待一个资源,使用Release方法释放一个资源。示例代码:using System;using System.Threading;namespace ProcessTest{ class Program { static Semaphore semaphore; static void Main(string[] args) { //创建一个限制资源类 //资源数为5,开放资源. 阅读全文
posted @ 2011-04-03 23:39 辛勤的代码工 阅读(1820) 评论(0) 推荐(0) 编辑
摘要: System.Threading.Interlocked类为多个线程共享的变量提供原子操作。为整型类提供原子类操作 经验显示,那些需要在多线程情况下被保护的资源通常是整型值,且这些整型值在多线程下最常见的操作就是递增、递减或相加操作。Interlocked类提供了一个专门的机制用于完成这些特定的操作。这个类提供了Increment、Decrement、Add静态方法用于对int或long型变量的递增、递减或相加操作。 示例代码:using System;using System.Threading;namespace ProcessTest{ class Program { static i. 阅读全文
posted @ 2011-04-03 22:49 辛勤的代码工 阅读(4048) 评论(2) 推荐(1) 编辑
摘要: volatile关键字 volatile关键字仅应用于类或结构字段,用于通知编译器,将有多个线程访问该字段,因此它不应当对此成员的状态做任何优化,这样可以确保该字段在任何时间呈现的都是最新的值。 不是所有的类型都可以被定义为volatile字段,只有以下类型才可被定义为volatile:引用类型。指针类型(在不安全的上下文中)。整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。具有整数基类型的枚举类型。已知为引用类型的泛型类型参数。IntPtr 和 UIntPtr。 注意观察一下,就能发现只有值或引用的位数不超过本机整型值的位数(在 阅读全文
posted @ 2011-04-03 20:31 辛勤的代码工 阅读(1587) 评论(0) 推荐(1) 编辑
摘要: System.Diagnostics.Process类的实例可以引用一个进程,被引用的进程包含以下几种:该实例的当前进程。本机上除了当前进程的其他进程。远程机器上的某个进程。创建或销毁子进程 示例代码:using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Threading;namespace ProcessTest{ class Program { static void Main(string[] args) { //创建一个记事本子进程. 阅读全文
posted @ 2011-04-03 18:45 辛勤的代码工 阅读(601) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页