进程
概念
进程(Process):可以理解为每一个应用程序都是一个进程。
.NET提供的操作进程的类:Process(非静态类),该类虽然是非静态类,但是提供了静态方法:GetProcesses()、Kill()、Start()等
例子:
static void Main(string[] args)
{
//获取当前正在运行的所有进程并打印在控制台
Process[] processes = Process.GetProcesses();
foreach (var item in processes)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
线程
概念
线程
线程(Thread):是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。
多线程
多线程:可以让一个程序同时处理多个事情(宏观同时,微观交替);可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。
线程的分类(前台线程和后台线程)
前台线程
前台线程:只有所有的前台线程关闭才能完成程序关闭。默认情况下创建的线程都是前台线程。设置线程为后台线程的代码:
static void Main(string[] args)
{
Thread thread = new Thread(Show);
thread.IsBackground = true;
}
后台线程
后台线程:只要所有前台线程结束,后台线程会自动自动结束。
C#跨线程访问
C#是不允许跨线程访问的,也就是说我们创建的线程无法访问其他线程里面的内容。比如:在winform程序里面新建一个线程去改变Label控件的任意属性,这个时候程序就会报错,报错原因就是因为Label控件属于主线程,只能在主线程内进行访问,跨线程访问就会报错。如果想要跨线程访问,可以在加载程序时添加一下代码:
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}