线程
线程与进程的区别:
进程:是计算机中已运行的实体。在面向线程设计的系统(当代多数系统)中,进程本身不是基本运行单位,而是线程的容器。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。也是独立调度和分派的基本单位。
一个进程可以由多个线程辅助执行。
开启线程的三种方式
1.通过异步委托开启线程
通过Func委托创建一个委托变量来指向我们需要使用的方法,使用BeginInvoke方法开启线程。
//需要委托的方法
static int Test(int i,string str)
{
Console.WriteLine("Test"+i+str);
return 100;
}
static void Main(string[] args)
{
//通过委托开启线程
Func<int,string,int> a = Test;
IAsyncResult可以取得当前线程的状态
IAsyncResult ar = a.BeginInvoke(100,"lymon",null, null); //开启一个新的线程去执行a所引用的方法
Console.WriteLine("Main");
//检测线程是否结束
while (ar.IsCompleted == false)
{
Console.Write(".");
Thread.Sleep(10); //控制子线程的检测频率
}
int res = a.EndInvoke(ar); //取得异步线程的返回值
//可以认为线程是同时执行的(异步执行)
Console.WriteLine(res);
结束线程的三种方法
- 通过while循环检测
使用isComplete方法用死循环判断线程是否结束,如果结束的话,使用EndInvoke方法取得线程的返回值
while (ar.IsCompleted == false)
{
Console.Write(".");
Thread.Sleep(10); //控制子线程的检测频率
}
int