- 进程
- 程序是一段可执行的代码
- 进程可以为程序执行的执行实例。程序执行一次,产生一个进程;程序执行结束等价于进程结束并销毁
- 进程间不能共享其他进程的资源
- 线程
- 一个线程是一个CPU可执行的通道(多核多线程CPU)
- 一个进程包含一个主线程,并创建多个线程。
- 所有线程共享进程资源
不带参数线程
using System.Threading;
void Test() {
Thread t = new Thread (Thread_Proc);
t.Start();
}
void Thread_Proc () {
Console.Write ("Hello Thread!");
}
带参数线程
void Test() {
Thread t = new Thread (Thread_Proc);
t.Start("Hello Thread!");
}
void Thread_Proc (object obj) {
Console.Write (obj);
}
匿名函数线程
void Test() {
Thread t = new Thread (
delegate() { Console.Write ("Hello Thread!"); } );
t.Start();
}
使用lambda表达式
void Test() {
Thread t = new Thread (
() => Console.Write ("Hello Thread!"));
t.Start();
}
匿名函数线程调用普通函数
void Test() {
Thread t = new Thread (
delegate() { Thread_Proc ("Hello Thread!"); } );
t.Start();
}
void Thread_Proc (string text) {
Console.Write (text);
}
创建后台进程
前台进程全部结束后,程序结束,后台线程强行终止。
默认创建的是前台进程
后台线程种植将避开finally或using中的清理工作,需小心处理
void Test() {
Thread t = new Thread (
delegate() { Console.Write ("Hello Thread!"); } );
t.IsBackgroud = true;
t.Start();
}
线程池
线程池通过共享线程资源并自动回收,达到优化线程开销
的目的
◼ 线程池中的线程都是后台线程
◼ 通过ThreadPool.QueueUserWorkItem使用线程池
void Test() {
ThreadPool.QueueUserWorkItem (Thread_Proc, "Hello");
}
void Thread_Proc (object obj) {
Console.Write (obj);
}
线程与进程优先级
线程优先级
t.Priority = ThreadPriority.AboveNormal;
Lowest/BelowNormal/Normal/AboveNormal/Highest
◼ 进程优先级
using System.Diagnostics;
Process.GetCurrentProcess ().PriorityClass =
ProcessPriorityClass.AboveNormal;
Idle/BelowNormal/Normal/AboveNormal/High/RealTime
线程中程修改界面控件
易懂的写法
delegate void DelSetText (string text);
void SetText (string text)
{
if (textBox.InvokeRequired)
textBox.Invoke (new DelSetText (SetText), text);
else
textBox.Text = text;
}
◼ 简洁的写法
delegate void DelSetText (string text);
void SetText (string text)
{
Invoke (new DelSetText ((text_d) => { textBox.Text = text_d; }),text);
}