.Net Framework 4/C# 进程和线程的使用
一、进程与进程类(Process)
每一个正在运行的应用程序都是一个进程。
获得当前程序中正在运行的进程可以用 Process,它可以实例化对象,还可以通过进程打开一些应用程序,用 Process 类的 Start 方法。
二、线程简介
每个正在操作系统上运行的应用程序都是一个进程,一个进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。
(一) 单线程简介
默认情况下,系统为应用程序分配一个主线程,该线程执行程序中以 Main 方法开始和结束的代码。
(二) 多线程简介
一般情况下,需要用户交互的软件都必须尽可能快地对用户的活动做出反应,以便提供丰富多彩的用户体验,但同时它又必须执行必要的计算,以便尽可能快地将数据呈现给用户,这时可以使用多线程来实现。
三、线程的基本操作
C# 中对线程进行操作时,主要用到了 Thread 类,该类位于 System.Threading 命名空间下,通过使用 Thread 类,可以对线程进行创建、暂停、恢复、休眠、终止及设置优先权等操作。另外,还可以通过使用 Monitor 类、Mutex 类和 lock 关键字控制线程间的同步执行。
(一) Thread 类
Thread 类位于 System.Threading 命名空间下,System.Threading 命名空间提供一些可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked 和 AutoResetEvent 等)外,该命名空间还包含一个 ThreadTool 类(它允许用户使用系统提供的线程池)和一个 Timer 类(它在线程池的线程上执行回调方法)。
(二) 创建线程
创建一个线程,只需将其声明并为其提供线程起始点处的方法委托即可。创建新的线程时,需要使用 Thread 类,该类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数,该委托包装了调用 Start 方法时由新线程调用的方法。创建了 Thread 类的对象之后,线程对象已存在并已配置,但并未创建实际的线程,这时,只有在调用 Start 方法后,才会创建实际的线程。
Start 方法用来使线程被安排执行,它有两种重载形式,例如有:
- 导致操作系统将当前实例的状态更改为 ThreadState.Running
public void Start()
- 导致操作系统将当前实例的状态更改为 ThreadState.Running,并选择提供包含线程执行的方法要使用的数据的对象
public void Start(Object parameter)parameter:一个对象,包含线程执行的方法要使用的数据
需要注意的是,如果线程已经终止,就无法通过再次调用 Start 方法来重新启动。
例如有:
Thread th = new Thread(Text);设置为后台线程
th.IsBackground = true;此时线程调用的 Text 方法没有参数,调用的是第一种形式
th.Start(); public void Text()
{for(int i =0; i < 10000; i++){Console.WriteLi