winfrom进程、线程、用户控件
一、进程
一个进程就是一个程序,利用进程可以在一个程序中打开另一个程序。
1、开启某个进程
Process.Start("文件缩写名");
注意:Process要解析命名空间。
2、通过绝对路径开启某个进程
Process p = new Process();
p.StartInfo = new ProcessStartInfo("要打开的程序绝对路径");
p.Start();
3、获取全部开启的进程:返回的是一个Process类的数组
Process[] pro = Process.GetProcesses();
4、杀死进程
对象.Kill();
5、常用的开启网页注册账号:
Process.Start("http://.....");
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Diagnostics; 6 using System.Drawing; 7 using System.Linq; 8 using System.Text; 9 using System.Windows.Forms; 10 11 namespace WindowsFormsApplication1 12 { 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void button1_Click(object sender, EventArgs e) 21 { 22 //限制可以选择的文件类型 23 openFileDialog1.Filter = "应用程序|*.exe"; 24 25 DialogResult dr = openFileDialog1.ShowDialog(); 26 if (dr == DialogResult.OK) 27 { 28 //将选中文件的路径放到textBox1里 29 textBox1.Text = openFileDialog1.FileName; 30 } 31 } 32 33 private void button2_Click(object sender, EventArgs e) 34 { 35 //先解析Process,实例化。 36 Process pro = new Process(); 37 38 //将路径参数实例化出来。 39 ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text); 40 41 //设置打开路径需要一个ProcessStartInfo类型参数。 42 pro.StartInfo = psi; 43 44 //调用他的打开方法 45 pro.Start(); 46 } 47 48 private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 49 { 50 //打开默认浏览器,网址是qq。 51 Process.Start("http://www.qq.com"); 52 } 53 54 private void button3_Click(object sender, EventArgs e) 55 { 56 //获取电脑上开着的所有进程,返还一个Process数组 57 Process[] pro= Process.GetProcesses(); 58 59 //遍历数组中每一个进程 60 foreach (Process p in pro) 61 { 62 //把进程打印在richTextBox1中 63 richTextBox1.Text += p.ToString() + "\r"; 64 65 //关闭进程,遍历一个关一个,慎用! 66 //p.Kill(); 67 68 } 69 } 70 } 71 }
二、线程
每个程序都有一个主线程,控制窗体。
如果主线程要执行的代码需要占用很多时间,就需要将这些要执行的代码另开一个线程来执行。
Thread要解析命名空间。
//使后台线程可以跨线程访问相应的对象。写在构造函数中。
Control.CheckForIllegalCrossThreadCalls = false;
//开一个新线程参数放方法的委托。
Thread th1 = new Thread(test1);
//让这个线程变成后台线程,主线程关闭的时候后台线程也关闭。
th1.IsBackground = true;
//开始执行线程
th1.Start();
//线程关闭
th1.Abort();
将该线程要做的事写成一个没有返回值的方法test1。
这个方法可以没有参数,也可以有一个参数但这个参数必须是object类型
如果方法需要一个参数,在线程开始里边把这个参数传过去。
将这个方法委托到该线程上去。
为了防止线程在关闭主窗口时的延迟关闭导致的程序报错,
在窗口的FormClosing事件中判断线程是否关闭了,如果还未关闭关闭线程。
三、用户控件
用户控件,顾名思义就是用户自己组成的控件。
1、制作用户控件:
在项目中添加新建项选用户控件,改个名字,添加。
注意:在用户控件的生成代码中把里面空间的访问修饰符都改为public。
制作完以后,生成一下,然后在工具箱中就会有这个用控件。
要想给用户控件中的控件设置属性内容,只能用代码设置。