一、进程
1、Process
提供对本地和远程进程的访问,并能够启动和停止本地系统进程。

一个程序就是一个进程。
命名空间using System.Diagnostics;

(1) Start ():启动进程,主要有如下参数设置
Start( ProcessStartInfo )
Start( string FileName ) //路径
Start( string FileName, string Arguments ) //Arguments:参数

(2) 属性:
Id:唯一进程标识号
ProcessName:进程名称
MachineName:进程运行所在的计算机名
StartInfo:进程的 StartInfo
StartTime:启动进程的时间
ExitTime:退出进程的时间
HasExited:进程是否已经终止

2、ProcessStartInfo:与 Process 一起使用,为 Process 设置启动参数

3、实例

(1)基本方法: Process.Start("calc");使用这个方法的前提是知道程序运行的名字

(2)实例化,使用路径

             try  //防止报错程序崩溃
            {
                Process p = new Process();//实例化进程类
                //创建进程开启路径对象
                ProcessStartInfo pf = new ProcessStartInfo(textBox1.Text);
                p.StartInfo = pf;//进程类开启路径指向
                p.Start();//启动进程
            }
            catch 
            {
                MessageBox.Show("路径错误");
            }

二、线程
1  进程是主线程,线程去执行一段需要时间的代码,主线程不会被占用,程序就
不会出现假死状态了。

线程就像是一个timer一样,就算timer的代码一直执行,也不会阻塞整个窗体上其他控件的可操作性。

使用线程可以大大提高代码的可执行效率。 

2 线程所在的命名空间:System.Threading;

3实例

(1)要注意的是,必须在调用Start方法之前设置线程的类型,否则一但线程运行,将无法改变其类型。

(2)程序默认所有的线程都为:前台线程

将新开的线程变为后台线程:th.IsBackground = true;

变为后台线程在关闭窗体时,线程未执行完工作内容,那么会默默的继续执行,直到执行完毕后才会

将整个进程关闭,不会影响窗体关闭。

             List<Thread> tlist = new List<Thread>();//全局变量,存放线程
// 函数1
//创建线程类,并使用委托,指向函数 Thread th = new Thread(方法名); th.IsBackground = false;//变为后台线程 th.Start(ss);//线程启动,将参数传给方法
tlist.Add(th);//将线程放入集合
// 函数2

             foreach (Thread t in tlist)
             {
             t.Abort();//停止线程
             }

(3)用线程执行方法,只能传一个参数,并且此参数必须是object类型。

(4)程序默认不允许跨线程访问对象,关闭监控就可以了。

    构造函数中 Control.CheckForIllegalCrossThreadCalls = false;

(5)若停止线程与开启线程不在同一个函数中,定义一个全局变量:集合类型