进程(Process)是计算机中的程序关于某数据集合上的一次运行活动是系统进行资源分配和调度的基本单位,是操作系统结构的基础。用通俗的话来讲:打开一个应用程序就是在操作系统上开启了一个进程进程之间可以相互独立运行,互不干扰。进程之间也可以相互访问、操作。
线程(Thread)是进程中的基本执行单元,操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。—条线程指的是进程中一个单一顶序的控制流,一个进程中可以并发多个线程我们目前写的程序都在主线程中。简单理解线程:就是代码从上到下运行的一条“管道”。
多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。
线程类: Thread
需要注意的是,使用该线程类时,需要引用命名空间using System.Theading;
下面列举 Thread 类的一些常用属性和方法:
CurrentContext 获取线程正在其中执行的当前上下文。 CurrentCulture 获取或设置当前线程的区域性。 CurrentPrincipal 获取或设置线程的当前负责人(对基于角色的安全性而言)。 CurrentThread 获取当前正在运行的线程。 CurrentUICulture 获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。 ExecutionContext 获取一个 ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息。 IsAlive 获取一个值,该值指示当前线程的执行状态。 IsBackground 获取或设置一个值,该值指示某个线程是否为后台线程。 IsThreadPoolThread 获取一个值,该值指示线程是否属于托管线程池。 ManagedThreadId 获取当前托管线程的唯一标识符。 Name 获取或设置线程的名称。 Priority 获取或设置一个值,该值指示线程的调度优先级。 ThreadState 获取一个值,该值包含当前线程的状态。 public void Abort() 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。 public static LocalDataStoreSlot AllocateDataSlot() 在所有的线程上分配未命名的数据槽。为了获得更好的性能,请改用以 ThreadStaticAttribute 属性标记的字段。 public static LocalDataStoreSlot AllocateNamedDataSlot( string name) 在所有线程上分配已命名的数据槽。为了获得更好的性能,请改用以 ThreadStaticAttribute 属性标记的字段。 public static void BeginCriticalRegion() 通知主机执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常的影响可能会危害应用程序域中的其他任务。 public static void BeginThreadAffinity() 通知主机托管代码将要执行依赖于当前物理操作系统线程的标识的指令。 public static void EndCriticalRegion() 通知主机执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常仅影响当前任务。 public static void EndThreadAffinity() 通知主机托管代码已执行完依赖于当前物理操作系统线程的标识的指令。 public static void FreeNamedDataSlot(string name) 为进程中的所有线程消除名称与槽之间的关联。为了获得更好的性能,请改用以 ThreadStaticAttribute 属性标记的字段。 public static Object GetData( LocalDataStoreSlot slot ) 在当前线程的当前域中从当前线程上指定的槽中检索值。为了获得更好的性能,请改用以 ThreadStaticAttribute 属性标记的字段。 public static AppDomain GetDomain() 返回当前线程正在其中运行的当前域。