1.c#进程类用Process(在命名空间System.Diagnostics中)定义:使用Process添加using System.Diagnostics(VS自动导入命名空间的方法,将光标方法该类后,三击Shift+Alt+F10)
Process可以管理本地计算机的进程的开启关闭:
比如Process.Start(“calc”);可以打开本地的计算器:
也可以通过指定的进程打开一个文件:定义一个ProcessStartInfo的对象psi并在new后面传递文件地址,将p赋值给p.StartInfo,这样在p.Start()时便会打开文件:
2.线程(一个进程由多个线程组成)
(1)线程类Thread,在命名空间System.Threading里
(2)线程对象名.Start();开启线程;
线程对象名.Abort();停止线程;
线程对象名.Suspend();挂起线程;线程对象名.Resume();恢复线程。
(注意:(1)通过Thread.Abort()停下来的线程都无法通过Thread.Start()方法再次启动,必须重新创建一个线程启动;(2)线程类的对象没有Sleep())
程序员不能确定线程什么时候执行,线程对象名.Start()只是标记这个线程准备就绪,这是由CPU决定的。(哪个线程抢到CPU就执行哪个线程,但多个线程同时执行时会轮流执行)。
(3)经典案例(java):
上述例子中依次创建了三个进程thread1,thread2,thread3,但并不是执行完了thread1里的run()再取执行thread2里的run(),而是三个进程thread1,thread2,thread3的run()一起执行,三个抢占CPU,哪个抢到执行哪个,输出结果也不确定,可能的输出结果:
ThreadA==>0
ThreadB==>0
ThreadC==>0
ThreadA==>1
ThreadB==>1
ThreadC==>1
…
(4)线程的用法
a.可以以函数名为参数,表示创建一个线程执行该方法。
b.Sleep()使用
创建了多个线程对象,写了对象名.Start()后这些线程一起执行。在线程中的函数中添加Thread.Sleep()可以使该线程暂停。
上述例子将Clock类的对象c的两个函数分别赋给两个线程,所以这两个函数一起执行,且c.getTime()方法里的while循环一秒执行一个循环,而c.getAlarm()方法里的while循环60秒执行一次循环。
下面的例子可以更深入理解Thread.Sleep();
这段代码中并没有写Thread对象,第一个for语句全部输出完后第二个for语句的内容输出。第一个for语句使用了Thread.Sleep(1000*3),每输出一个数字停顿3秒后再输出下一个。第二个for语句同理。
(5)前台线程和后台线程
默认线程为前台线程(关闭了主线程(关闭主窗体)前台线程并未关闭),将其改为后台线程的方法后主程序关闭了就会一起关闭:
3.c#清空控制台内容:
Console.Clear();