您的位置:首页 > 其它

.net线程基础知识

2006-11-16 12:25 519 查看
一.线程的创建

需要创建2个对象Thread&ThreadStart:

ThreadStart ts=new ThreadStart(要执行的方法);
Thread
t=new Thread(ts);
(ThreadStart代表一个委托,只接受方法名称)

二.Thread基本方法:
Start:将线程状态改为
Running
Abort:调用此方法后,在当前的线程上引发
ThreadAbortException,该异常终止此线程的过程。调用此方法通常会终止线程。
Interrupt:该方法打断一
个处于WaitSleepJoin状态的线程。调用Abort结束线程的方法将使该线程执行完Finally语句就结束,而调用Interrupt方法则
允许线程执行完整个线程体后结束。
Join:暂停调用自身线程直到指定线程终止。
Resume:恢复挂起的线
程。
Suspend:无限期挂起线程,除非另外线程唤醒它。若已经挂起则不起作用。
Sleep:时钟中断。

三.线程优先级:(ThreadPriority)
枚举类型,包
括Highest,AboveNormal,Normal,BelowNormal,Lowest

四.线程状态:(ThreadState)
Aborted:线程
处于停止状态,但不一定执行完毕
AbortRequested:Abort方法已经调用,但线程还没有收到
System.Threading.Threadexception.
Background:线程在后台执行

Running:线程正在执行
Stopped:线程完成所有指令并停止
StopRequested:线程请求停
止状态
Suspended:线程处于挂起状态
SuspendRequested:线程处于挂起请求状态
Unstarted:线程未调用Start方法
WaitSleepJoin:线程通过调用Wait(),Sleep()
orJoin()来暂停线程。

五.唤醒线程:
在线程睡眠状态时,若想在到达指定时间之前唤醒线程,只能使用Interrupt().

六.关于主线程与界面更新线程两个线程操作界面的解决办法:

理:使用委托
public delegate void UpdateData(string
val);
更新界面方法独立出来:
void
方法名{/*控件更新代码*/}
在界面更新线程执行的方法中,如此:
UpdataData ud=new
UpdataData(更新界面的方法名);
this.Invoke(ud,传递参数集);

七.连接线程:
许多资料对join的介绍都不甚清晰。如:暂停调
用线程直到线程终止。这话我一看我就SB了。
所以,我改了一下,应该是暂停自身线程调用直到指定线程终止。

E.G.
2个线程,first&second
first=new Thread(new
ThreadStart(fitstMethod));
second=new Thread(new
ThreadStart(secondMethod));
first.Start();
second.Start
();
当secondMethod方法开头包括first.Join()的时候,就会在first线程执行完毕后,再执行调用
secondMethod方法的线程second.

八.线程的使用时机:
1.后台进程(比如为了防止操作界面挂掉让
人不爽)
2.访问外部资源(比如由于网络资源受到传输速率限制,对应用程序性能带来不利影响)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: