进程(process):
1 进程对象名: proces (类)引用需对其进行解析;
2 应用进程:
1) 直接打开进程,代码如下:
proces.start(); //括号里加要打开默认英文的中文名;
2) 浏览文件夹并在textbox1里边显示路径名称并打开里边程序
界面如下:
(1) 先打开文件夹并将路径显示在textbox里边;代码如下
private void button2_Click(object sender, EventArgs e) { // DialogResult dr = openFileDialog1.ShowDialog(); if (dr == DialogResult.OK) { textBox1.Text = openFileDialog1.FileName; } }
(2)打开找到的程序;代码如下:
private void button1_Click(object sender, EventArgs e) { Process p = new Process(); //创建新进程 ProcessStartInfo ps = new ProcessStartInfo(textBox1.Text); // 要打开的对象是textbox1里显示的路径 p.StartInfo = ps; p.Start(); //打开 }
3) 用默认浏览器直接打开网址:
代码: process.start ("http://www.baidu.com" );
4) 清空进程:(慎重,清空有可能导致电脑无法操作)
代码:
private void button4_Click(object sender, EventArgs e) { Process[] ps = Process.GetProcesses(); //设置进程新数组ps,里边的内容为从电脑获取的进程 foreach (Process p in ps) //将里边的进程遍历并杀死 { p.Kill(); } }
线程(thread):
1 分类: 1)主线程:当一个程序启动时,就有一个进程被操作系统创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。主线程的重要性体现在两方面: 1.是产生其他子线程的线程;2.通常它必须最后完成执行比如执行各种关闭动作。
2)子线程:(1)前台线程:前台线程与主线程平级并不随着主线程关闭而关闭。
(2)后台线程:线程名字.IsBackground = true; //是不是后台进程(true,fasle)若是则随着主线程关闭而关闭
2 创建新线程及应用
private void button5_Click(object sender, EventArgs e) { Thread th = new Thread(test1); //新建线程 并调用方法 (是前台线程与主线程平级并不随着主线程关闭而关闭) th.IsBackground = true; //是不是后台进程(true,fasle)若是则随着主线程关闭而关闭 th.Start(); //开始执行 } public void test1() //方法是循环,显示并间隔两秒执行 { for (int a = 0; a < 10; a++) { Console.WriteLine(a); // 循环 Thread.Sleep(2000); //间隔几秒
}
}
3 如何用线程沾满CPU 原理:1)将进程改为前台进程 目的:关闭程序后,仍执行此进程
2)创建无限个进程,调用无线个方法 目的 :占满cpu
代码如下:
private void button5_Click(object sender, EventArgs e) { while (true) { Thread th = new Thread(test1); //新建线程 并调用方法 (是前台线程与主线程平级并不随着主线程关闭而关闭) th.Start(); //开始执行 } } public void test1() //方法是循环,显示并间隔两秒执行 { for (int a = 10; a > 10; a++) { Console.WriteLine(a); // 循环 Thread.Sleep(2000); //间隔几秒 } }
创建抽奖游戏:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace 记事本 { public partial class Form2 : Form { public Form2() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; //允许线程访问 } Thread th; private void button1_Click(object sender, EventArgs e) { th = new Thread(lucky); // 创建新线程并调用lucky方法 th.IsBackground = true; //是后台应用 th.Start(); //点击开始 } public void lucky() //创建一个没有返回类型的方法 { string[] name = new string[] { "李先生 18765627280", "王先生 18555219598", "刘先生 15899882322", "何先生 18799885858" }; //创建抽奖名单数组 while (true) { Random r = new Random(); // 创建新随机数 int a = r.Next(0, name.Length); //随机数的选择在0,与数组长度之间 textBox1.Text = name[a]; // 文本框显示的是数组索引的那个 } } private void button2_Click(object sender, EventArgs e) { if (th != null) //如果线程不为空 { th.Abort(); //点击停止 } }
3 递归:
应用:分组,多级菜单大多用treeview,如果不知道下边有多少级就用递归。
1) 创建节点结构,代码如下:
TreeNode tn1 = new TreeNode("节点1"); // 创建名为节点1的节点 TreeNode tn1_1 = new TreeNode("节点1_1");//创建名为节点1_1的节点 tn1.Nodes.Add(tn1_1); //将节点1_1加入tn1作为节点1的节点 TreeNode tn2 = new TreeNode("节点二"); // 创建名为节点2的节点 TreeNode tn3 = new TreeNode("节点三"); // 创建名为节点3的节点 treeView1.Nodes.Add(tn1); treeView1.Nodes.Add(tn2); treeView1.Nodes.Add(tn3); //将创建的节点1,2,3放入treeview1的集合里
则:显示为:
数据绑定:在文件夹 App_Code 下创建表的实类————再创建数据访问类————在数据访问类下写方法查询全表的内容————再用集合把表的内容取出来——
递归方法:
private void button2_Click(object sender, EventArgs e) { databind("0001", treeView1.Nodes); // 给方法的编号为0001(国家编号),然后把取出的集合放进treeviews.nodes里 } public void databind(string code, TreeNodeCollection tnc ) // 给方法一个编号和编号的集合 { foreach (ChinaTown cs in list) // 将取出来的表集合 list遍历出来 { if (cs.ParentAreaCode == 0001) // 如果表里的父级编号ParentAreaCode是0001 { TreeNode tn = new TreeNode(cs.AreaName); // 节点tn 就是表里父级编号是001的名字 databind(cs.areacode, tn.nodes); //递归 tnc.Add(tn); //把tn的数据加在treeview集合里 } } }