zoukankan      html  css  js  c++  java
  • 只开启一个窗体和进程以及多线程的操作

    只开启一个窗体:

     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         }
  • 相关阅读:
    《必须知道的.net》读后感 转
    Web Service
    设计模式
    对做“互联网产品”的一些想法
    四大发明之活字印刷——面向对象思想的胜利
    每个IT人都应当拥有的30条技能
    面向对象的本质是什么?
    数据库设计规范 zhuan
    翻动100万级的数据 —— 只需几十毫秒 转
    程序员发展十分重要的12条日常习惯
  • 原文地址:https://www.cnblogs.com/mazhijie/p/5639041.html
Copyright © 2011-2022 走看看