只开启一个窗体:

 1 Form1 F1 = null;
 2         public Form2(Form1 f1)
 3         {
 4             InitializeComponent();
 5             F1 = f1;
 6         }
 7 
 8         private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 9         {
10             F1.Close();
11         }
12 
13         List<Form> list = new List<Form>();//建立一个可以存放form的泛型集合
14         private void button1_Click(object sender, EventArgs e)
15         {
16             Form3 f3 = new Form3(this);   f3.Tag = "F3";
17             bool hasForm = false;
18             foreach (Form f in list)
19             {
20                 if (f.Tag == f3.Tag)  //说明这个窗体已经存在了
21                 {
22                     hasForm = true; //我记录一下,这个窗体是已经存在的
23                     f.WindowState = FormWindowState.Normal;
24                     f.Show();
25                     f.Activate();
26                     //f.Focus(); //我要把焦点定位到已经存在的这个窗体上
27                     
28                     f3.Close(); //把新new出来的窗体关闭掉
29                 }
30             }
31 
32             if (hasForm == false)
33             {
34                 f3.Show();
35                 list.Add(f3);
36             }
37         }
38         private void button2_Click(object sender, EventArgs e)
39         {
40             Form4 f4 = new Form4();   f4.Tag = "F4";
41             bool hasForm = false;
42             foreach (Form f in list)
43             {
44                 if (f.Tag == f4.Tag)  //说明这个窗体已经存在了
45                 {
46                     hasForm = true; //我记录一下,这个窗体是已经存在的
47                     f.WindowState = FormWindowState.Normal;
48                     f.Show();
49                     f.Activate();
50                     //f.Focus(); //我要把焦点定位到已经存在的这个窗体上
51 
52                     f4.Close(); //把新new出来的窗体关闭掉
53                 }
54             }
55             if (hasForm == false)
56             {
57                 f4.Show();
58                 list.Add(f4);
59             }
60         }
61         public void DeleteF3(Form3 f3)
62         {
63             List<Form> aa = new List<Form>();
64 
65             foreach (Form f in list)
66             {
67                 if (f.Tag != f3.Tag)
68                 {
69                     aa.Add(f);
70                 }
71             }
72             list = aa;
73         }

 

进程:

一个进程只默认有一个主线程,如果要执行一段需要时间的代码,那么在这段时间内窗体就失去控制,进入假死状态。

1  //开启一个新的进程
2  //Process.Start("calc");
3  //Process.Start("FireFox");
4  //Process.Start("Chrome");//直接开启程序,括号中的名字注册列表中的名字
5  //Process.Start("iexplore", "http://www.baidu.com");//开启IE并且让IE打开百度       

通过路径打开一个进程:

 1 private void button2_Click(object sender, EventArgs e)
 2         {
 3             openFileDialog1.Filter = "应用程序|*.exe";
 4             DialogResult dr = openFileDialog1.ShowDialog();
 5 
 6             if (dr == DialogResult.OK)
 7             {
 8                 textBox1.Text = openFileDialog1.FileName;//或许要开启进程的绝对路径
 9             }
10 
11 
12         }
13 
14         private void button3_Click(object sender, EventArgs e)
15         {
16             Process p = new Process();
17 
18             ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);//指定启用进程时的文件名
19 
20             p.StartInfo = psi;//开启进程
21 
22             p.Start();
23 
24         }

 

 

 

线程:

 1 public Form1()
 2         {
 3             InitializeComponent();
 4             Control.CheckForIllegalCrossThreadCalls = false;//开启线程首先要将主线程不允许开启其他线程的控制关掉
 5         }
 6         Thread th = null;
 7         private void button1_Click(object sender, EventArgs e)
 8         {
 9             th = new Thread(xunhuan);//线程调用方法不需要加括号
10             th.IsBackground = true;//让这个线程变为后台线程,使得关闭进程可以立刻结束线程,否则线程必须运行完毕才会关闭进程
11             th.Start();//线程开始执行,线程能且只能传递一个object类型的参数,并且没有返回值。th.Start(object);
12         }
13 
14         public void xunhuan()
15         {
16             for (int i = 1; i <= 10; i++)
17             {
18                 label1.Text = i.ToString();
19                 Thread.Sleep(1000);
20                 if (i == 5)
21                 {
22                     th.Abort();//关闭线程,线程只能关闭不能暂停,关闭后只能再开启一个新的线程而不能再开启原来的线程。
23                 }
24             }
25 
26         }

 

posted on 2016-07-03 22:38  马MZJ  阅读(299)  评论(0编辑  收藏  举报