进程和线程

进程和线程

进程
 1 //获取当前系统所有进程
 2 Process[] pros = Process.GetProcesses();
 3 //关闭进程0
 4 //pros[0].Kill();
 5 Process pro = new Process();
 6 //用进程打开文件
 7 //pro.StartInfo = new ProcessStartInfo(@"C:\Users\Saul\Desktop\123.txt");
 8 //打开程序
 9 //pro.StartInfo = new ProcessStartInfo("mspaint");
10 //带参数方式
11 pro.StartInfo = new ProcessStartInfo("excel", "-safe");
12 pro.Start();  
13 //或者直接
14 Process.Start("iexplore", "http://www.baidu.com");
15 Process.Start("notepad");  
16 //用系统打开文件 17 System.Diagnostics.Process.Start(fileName);

 

线程 主线程处理界面,单线程的话有时候会出现假死,通过多线程解决

线程里的方法如果带参数,必须是Object类型,传参通过.Start(参数)

 1 Thread td;
 2 private void button1_Click(object sender, EventArgs e)
 3 {
 4     td = new Thread(Test);
 5     //设置为后台线程,前台线程在主线程结束(如主窗口关闭)后,他还会继续运行直到他自己结束;
 6     //后台线程在主线程结束时直接结束
 7     td.IsBackground = true;
 8     //告诉系统td准备就绪,什么时候启动是由cpu觉得,无法控制
 9     td.Start("ssssss");
10 }
11 void Test(object s)
12 {
13     string ss = (string)s;
14     for (int i = 0; i < 10000; i++)
15     {
16         textBox1.Text = i.ToString();
17     }
18 }  
19 private void Form1_Load(object sender, EventArgs e)
20 {
21     //默认不允许跨进程,textBox1是由主进程建立的,所以td无法修改
22     //必须通过以下这句禁止检查是否跨进程
23     Control.CheckForIllegalCrossThreadCalls = false;
24     //但是在这种情况下,关闭主进程时候,有可能出现td还在访问主进程建立的textBox1情况,
25     //以至于textBox1被td占用,主进程无法释放资源。所以在关闭时候,进行判断,强行结束td
26 }
27 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
28 {
29     //判断td是否还在,如果是就结束他
30     if (td != null)
31     {
32         //abort了的进程无法再启动。
33         td.Abort();
34     }
35 }

 

posted on 2016-12-20 16:34  jmlsaul  阅读(89)  评论(0)    收藏  举报