1.进程 (资源分配的最小单位)
进程是操作系统的一个基本概念,可以简单理解为“正在运行的程序”。
进程之间是相互独立的。
利用Process类可启动、停止本机或远程进程。
2.线程 (程序执行的最小单位)
一个进程划分为若干个独立的执行流,每个流都称为一个线程。
一个进程中既可以只包含一个线程,也可以同时包含多个线程。
3.是否支持多线程
检查本机电脑是否支持多线程,大于1就可以,一般电脑都支持。
//本机是否支持多线程 大于1就可以
Console.WriteLine(Environment.ProcessorCount);
4. Process类
利用Process类,可以启动和停止本机进程,获取或设置进程优先级、确定进程状态,获取进程列表和各进程的资源占用情况等。
使用Process需要先引入System.Diagnostics命名空间:using System.Diagnostics;
获取进程列表如下:
//进程查看
Process[] myProcesses = Process.GetProcesses(); //本机的进程列表
foreach(Process p in myProcesses)
{
Console.WriteLine(p.Id);
}
Console.ReadKey();
代码执行结果截图:
Process类也可以查询远程计算机上进程的相关信息,将ip传入即可。
如:Process[] myProcesses = Process.GetProcess(“192.168.0.1”);
5.启动进程
5.1 启动某个进程
- 需要创建Process类的实例
- 设置Starlnfo属性((程序名称+传递参数)
- 调用Start方法启动该进程
- 等待启动成功
5.2 控制图形界面
ProcessWindowStyle枚举指定进程如何显示窗口。
- Normal(正常窗口)
- Hidden(隐藏窗口)
- Minimized(最小化窗口)
- Maximized(最大化窗口)
5.3 启动进程示例
Process p1 = new Process();
p1.StartInfo.FileName = "Notepad.exe"; //准备执行记事本
p1.StartInfo.Arguments = "Test1234.txt"; //创建或打开的文档
p1.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;//打开方式为图形化界面 最小化
p1.Start();
6.关闭进程
- 获取进程Handel
- Process净态的GetProcessByld方法
- Process净态的GetProcessesByName方法
- 停止进程
- Kill方法和CloseMainWindow方法
前者用于强行终止进程,后者只是"请求"终止进程。 - HasExited属性
HasExited属性用于判断启动的进程是否已停止运行。
- Kill方法和CloseMainWindow方法
7.三个进程案例
7.1 winform界面设计
7.2 代码详情
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace 三个进程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Process p1 = new Process();
private Process p2 = new Process();
private Process p3 = new Process();
private void button1_Click(object sender, EventArgs e)
{
//Process p1 = new Process();
p1.StartInfo.FileName = "Notepad.exe"; //准备执行记事本
p1.StartInfo.Arguments = "Test1234.txt"; //创建或打开的文档
p1.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;//打开方式为图形化界面 最小化
p1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
//Process p2 = new Process();
p2.StartInfo.FileName = "mspaint.exe"; //准备执行画图
p2.StartInfo.WindowStyle = ProcessWindowStyle.Normal;//打开方式为图形化界面
p2.Start();
}
private void button3_Click(object sender, EventArgs e)
{
//Process p3 = new Process();
p3.StartInfo.FileName = @"B:\php\作业\实训二.docx"; //准备执行实训二文档 @"绝对路径"
p3.StartInfo.WindowStyle = ProcessWindowStyle.Normal;//打开方式为图形化界面
p3.Start();
}
private void button4_Click(object sender, EventArgs e)
{
if (!p1.HasExited) //如果还没有关闭,进行关闭
{
p1.CloseMainWindow(); //kill 强制关闭 Close 请求终止进程
}
if (!p2.HasExited)
{
p2.CloseMainWindow();
}
if (!p3.HasExited)
{
p3.CloseMainWindow();
}
}
}
}