【2017-05-04】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。
制作完以后,生成一下,然后在工具箱中就会有这个用控件。
要想给用户控件中的控件设置属性内容,只能用代码设置。