标签:
只开启一个窗体:
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); 17 bool hasForm = false; 18 foreach (Form f in list) 19 { 20 if (f.Name == f3.Name) //说明这个窗体已经存在了 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(); 41 bool hasForm = false; 42 foreach (Form f in list) 43 { 44 if (f.Name == f4.Name) //说明这个窗体已经存在了 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.Name != f3.Name) 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 }
标签:
原文地址:http://www.cnblogs.com/mazhijie/p/5639041.html