【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() + "
";
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。

制作完以后,生成一下,然后在工具箱中就会有这个用控件。

 

要想给用户控件中的控件设置属性内容,只能用代码设置。

原文地址:https://www.cnblogs.com/qq609113043/p/6808023.html