Process进程、Thread线程

前台线程和后台线程

InvokeHelper:跨线程访问/修改主界面控件方法、属性

C#线程用法及跨线程访问

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Diagnostics;  
  6.   
  7. namespace 进程Process  
  8. {  
  9.     /// <summary>  
  10.     /// Process类是一个非静态类。它里面包含静态成员和非静态成员。静态成员有类直接调用,非静态成员有类的对象来调用  
  11.     /// </summary>  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             //每一个用户程序都是一个进程。在.net中操作进程的这个类叫做Process  
  17.             Process[] pros = Process.GetProcesses(); //获取当前计算机中正在运行的所有进程。存放到一个进程数组中(Process[] pros)  
  18.   
  19.             foreach (var item in pros)  
  20.             {  
  21.                 //item.Kill();//立即停止当前进程。即:杀死当前进程。这个不能乱用啊。写在这个循环里面,就杀掉了所有正在运行的进程了,MD用了一次给我电脑都关闭了,太危险了。  
  22.   
  23.                 Console.WriteLine(item); //将每一个进程输出到控制台。  
  24.             }  
  25.   
  26.   
  27.             //通过进程来打开一些应用程序 //通过指定文档或应用程序文件的名称来启动进程资源:参数是:要在进程中运行的文档或应用程序文件的名称。  
  28.             Process.Start("calc");  //打开计算器  
  29.             Process.Start("mspaint"); //打开绘图工具  
  30.             Process.Start("iexplore","Http://www.baidu.com"); //打开浏览器,打开百度  
  31.   
  32.   
  33.             //通过进程来打开一些文件  
  34.             Process p = new Process();  
  35.   
  36.             //并指定启动进程时使用的诸如应用程序或文档的文件名。  
  37.             ProcessStartInfo psi = new ProcessStartInfo(@"C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe");  
  38.   
  39.             //StartInfo:它表示启动该进程时要使用的数据  
  40.             p.StartInfo=psi;  
  41.             p.Start();  //启动进程  
  42.         }  
  43.     }  
  44. }  


线程

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading;  
  6.   
  7. namespace Thread线程  
  8. {  
  9.     /// <summary>  
  10.     /// 当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main   
  11.     /// Thread),因为它是程序开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。  
  12.     ///   
  13.     /// 一个进程是由多个线程组成的。线程分为两种,一种叫前台线程。另一种叫后台线程。  
  14.     /// 前台线程:应用程序必须运行完所有的前台线程才可以退出;(主线程就是属于前台线程)  
  15.     /// 后台线程:而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。  
  16.     ///   
  17.     /// </summary>  
  18.     class Program  
  19.     {  
  20.         public static void Test()  
  21.         {  
  22.             for (int i = 0; i < 100; i++)  
  23.             {  
  24.                 Console.WriteLine(i);  
  25.             }  
  26.             Console.ReadKey();  
  27.         }  
  28.   
  29.   
  30.         //单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。(这样容易发生“假死”等问题。例如:一个前台线程没有执行完毕,程序怎么都无法退出,卡在那里不动,造成假死,非要等前台线程都执行完毕了,才能退出程序。又例如:一个控制台程序,程序一开始便启动了10个线程,每个线程运行5秒钟时间。由于线程的IsBackground属性默认为false,即它们都是前台线程,所以尽管程序的主线程很快就运行结束了,但程序要到所有已启动的线程都运行完毕才会结束)  
  31.   
  32.         //而多线程的目的就是让计算机“同时”做多件事,节约时间。多线程是一种提高程序运行效率和性能的常用技术  
  33.         static void Main(string[] args)  
  34.         {  
  35.             Console.WriteLine("我现在还不想吃饭"); //主线程完成输出。--这是主线程干的事  
  36.   
  37.   
  38.             //创建一个线程。让这个线程去执行Test()这个方法。(注意Test这个方法不要括号)  
  39.             //默认情况下我们创建的这个线程叫“前台线程”。我们也可以将他设为“后台线程”  
  40.             Thread th = new Thread(Test);        //--这是th这个线程干的事  
  41.   
  42.             th.IsBackground = true;//将刚刚创建的th这个线程设为“后台线程”  
  43.                   
  44.   
  45.             th.Start();//标记这个线程准备就绪了,可以随时被CPU执行(线程什么时候去执行有CPU决定,我们是不能手动的去调用线程的,我们能做的就是告诉CPU,这个线程已经准备好了,你可以随时执行它。如果此时CPU很忙的话它依然执行不了这个线程,如果不忙的话就可能马上来执行这个线程)  
  46.   
  47.             Console.WriteLine("我要吃饭"); //主线程完成输出  --这是主线程干的事  
  48.   
  49.             for (int i = 101; i < 200; i++)  
  50.             {  
  51.                 Console.WriteLine(i);  //主线程完成输出  --这是主线程干的事  
  52.             }  
  53.   
  54.   
  55.             //在.net下是不允许跨线程访问的。解决跨线程访问的方法是:Control.CheckForIllegalCrossThreadCalls = false;   
  56.             //这个CheckForIllegalCrossThreadCalls属性指示是否捕获对错误线程的调用,如果false 就表示不检查对错误线程的调用。如果是true就表示检查对错误线程的调用。【这个Control类是:WinForm中所有控件的基类】  
  57.   
  58.   
  59.             Thread.Sleep(3000);//让当前线程停止3秒后再运行。  
  60.             Console.WriteLine("Hellow world");  
  61.         }  
  62.   
  63.     }  
  64. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值