一.线程的创建
需要创建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.访问外部资源(比如由于网络资源受到传输速率限制,对应用程序性能带来不利影响)