- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
应用程序设计教程作者耿肇英赵建利耿燚第10章多线程和socket编程初步
在线教务辅导网:;10.1 创建线程; Windows操作系统中有很多这样的例子,例如复制文件时,一方面在进行磁盘的读写操作,同时一张纸不停的从一个文件夹飘到另一个文件夹,这个飘的动作实际上是一段动画,两个动作是在不同线程中完成的,就像两个动作是同时进行的。又如Word程序中的拼写检查也是在另一个线程中完成的。每个进程最少有一个线程,叫主线程,是进程自动创建的,每进程可以创建多个线程。本节介绍线程类(Thread)的属性和方法以及如何创建线程。 ;10.1.1 线程类(Thread)的属性和方法;构造函数:New(new ThreadStart(线程中要执行的无参数方法名)),参数中指定的方法需要程序员自己定义,这个方法完成线程所要完成的任务,退出该方法,线程结束。该方法必须为公有void类型的方法,无参数。如果希望有参数,可使用VB.Net2.0中新构造函数:New(new ParameterizedThreadStart(线程中要执行的只能有一个参数的方法名))。
方法Start():建立线程类对象后,线程处于未启动状态,这个方法使线程改变为就绪状态,如果能获的CPU运行时间,线程变为运行状态。;方法IsAlive():判断线程对象是否存在,=true,线程存在。
方法Abort():撤销线程对象。不能撤销一个已不存在的线程对象,因此在撤销一个线程对象前,必须用方法IsAlive()判断线程对象是否存在。
静态方法Sleep():线程休眠参数设定的时间,单位为毫秒,此时线程处于休眠状态。线程休眠后,允许其他就绪线程运行。休眠指定时间后,线程变为就绪状态。
方法Suspend()和Resume():Suspend()方法使线程变为挂起状态。Resume方法使挂起线程变为就绪状态,如能获的CPU的运行时间,线程变为运行状态。如线程多次被挂起,调用一次Resume()方法就可以把线程唤醒。由于不安全建议不使用这两个函数。;10.1.2 创建线程例子;//dFun类可代表无返回值有一个string参数方法
delegate void dFun(string text);
//dFun类变量
dFun dFun1;
//线程类变量
private Thread thread;
(4)为标题为“新线程”的按钮(button1)增加单击事件处理函数如下:
private void button1_Click(object sender, EventArgs e)
{ //生成线程类对象,fun为自定义方法名称
thread=new Thread(new ThreadStart(fun));
Label1.Text = 0“ 运行时间从0开始; //线程变为就绪状态,如能获的CPU运行时间,
thread.Start() //线程变为运行状态
//标题为“新线程”的按钮,创建线程后,
Button1.Enabled = False //不允许再创建线程
//标题为“撤销”的按钮,允许对运行状态的线程撤销
//Button2.Enabled = True
}
(5)为标题为“撤销”的按钮(button2)增加单击事件处理函数如下:
private void button2_Click(object sender, EventArgs e)
{ if(thread.IsAlive)
{ thread.Abort(); //撤销线程对象; button1.Enabled=true;
button2.Enabled=false;
}
}
(6)C#线程模型允许将任何一个公有过程(静态或非静态)作为线程过程,因此允许在任何一个类(不要求这个类是某个类的子类)中定义线程过程,而且同一个类中可以定义多个线程过程。 C#不允许在此过程中直接修改线程外控件属性,这是防止多个线程同时修改同一控件的同一属性发生错误,必须使用控件的Invoke方法修改线程外控件属性,Invoke方法有两个参数,参数1是修改控件属性的方法的委托, 参数2是object数组,是传递给参数1代表的方法的参数。为Form1类定义一个线程方法如下:;//C#1.x中在线程中执行的方法,退出该方法,线程结束
public void fun() //必须为公有void类型方法,无参数
{ while(true) //这里是死循环,线程将一直运行
{ //允许得到线程外控件属性值
int x=Convert.ToInt32(label1.Text);
x++;
string
原创力文档


文档评论(0)