2009年9月10日

摘要: 在上一讲介绍了使用lock来实现线程之间的同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:[代码] 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。 图1 从上图被标注的区域可以看到,一条lock语句被编译成了调用Monitor的Enter和Exit方法。Monitor在S... 阅读全文
posted @ 2009-09-10 15:10 英雄 阅读(278) 评论(0) 推荐(0) 编辑
 
摘要: 虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用。让我们先看看如下的代码:[代码] 上面的程序的基本功能是使用Increment的Inc方法为n递增max,所不同的是,将在Main方法中启动30个线程同时执行Inc方法。在本例中max的值是10000(通过Increment的构造方法传入)。读者可以运行一下这个程序,正常的结果应该是300000,但通常不会得到这个结果,一般获得的结... 阅读全文
posted @ 2009-09-10 15:08 英雄 阅读(244) 评论(0) 推荐(0) 编辑
 
摘要: 如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。 在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立5... 阅读全文
posted @ 2009-09-10 15:05 英雄 阅读(354) 评论(0) 推荐(0) 编辑
 
摘要: 五、 判断多个线程是否都结束的两种方法确定所有线程是否都完成了工作的方法有很多,如可以采用类似于对象计数器的方法,所谓对象计数器,就是一个对象被引用一次,这个计数器就加1,销毁引用就减1,如果引用数为0,则垃圾搜集器就会对这些引用数为0的对象进行回收。方法一:线程计数器线程也可以采用计数器的方法,即为所有需要监视的线程设一个线程计数器,每开始一个线程,在线程的执行方法中为这个计数器加1,如果某个线... 阅读全文
posted @ 2009-09-10 15:02 英雄 阅读(311) 评论(0) 推荐(0) 编辑
 
摘要: 一、 Thread类的基本用法通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下:[ComVisibleAttribute(true)]public delegate void ThreadStart()我们可以通过... 阅读全文
posted @ 2009-09-10 15:01 英雄 阅读(883) 评论(0) 推荐(1) 编辑
 
摘要: 开发语言:C#3.0IDE:Visual Studio 2008本系列教程主要包括如下内容:1. BeginInvoke和EndInvoke方法2. Thread类3. 线程池4. 线程同步基础5. 死锁6. 线程同步的7种方法7. 如何在线程中访问GUI组件一、线程概述在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任... 阅读全文
posted @ 2009-09-10 14:57 英雄 阅读(8263) 评论(1) 推荐(10) 编辑
 
摘要: /// <summary>/// 将DataSet里所有数据导入Excel./// 需要添加COM: Microsoft Excel Object Library./// using Excel;/// </summary>/// <param name="filePath"></param>/// <param name="ds">&l... 阅读全文
posted @ 2009-09-10 14:54 英雄 阅读(321) 评论(0) 推荐(2) 编辑
 
摘要: C# MDI窗体菜单合并子窗体菜单非常简单,只需设置一下属性AllowMerge=True就OK;但要合并工具栏,就稍微复杂一下了。C# MDI窗体工具栏合并子窗体工具栏第一,MDI窗体代码://frmMain为MDI窗体private void frmMain_Load(object sender, EventArgs e){ //toolMDI为MDI窗体上的工具栏,在启动程序先隐藏,待到成功... 阅读全文
posted @ 2009-09-10 14:53 英雄 阅读(1904) 评论(0) 推荐(0) 编辑
 
摘要: 一、文本框if(this.textBox1.Text.Trim()=="") return;下拉列表if (comboBox1.Text.Trim() == "") return;二、if(this.textBox1.Text.Trim()!="")if(comboBox1.Text.Trim() != "")其它如folderBrowserDialog1.SelectedPath.Trim()等... 阅读全文
posted @ 2009-09-10 14:49 英雄 阅读(234) 评论(0) 推荐(0) 编辑
 
摘要: 关闭时代码if(MessageBox.Show("确定关闭系统吗?","关闭确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question) == DialogResult.OK){ Application.Exit(); }如果有多个地方要写,可以把上面写成/// <summary> /// 关闭系统 /// </summary&g... 阅读全文
posted @ 2009-09-10 14:48 英雄 阅读(1175) 评论(0) 推荐(0) 编辑