• 使用Thread类可以创建和控制线程


    1.创建线程

    1. static void Main(string[] args)  
    2. {  
    3.     /* Thread类 
    4.      * 创建控制线程 
    5.      * 其构造函数接受ThreadStart和ParameterizedThreadStart类型的委托参数 
    6.      */  
    7.     Thread t1 = new Thread(ThreadMain);  
    8.     t1.Name = "66";  
    9.     //创建了线程后,可以用Start()方法启动线程啦^-^   
    10.     t1.Start();  
    11.   
    12.     Console.WriteLine("主线程");  
    13.   
    14.     /* 使用λ表达式创建线程更简洁 */  
    15.     Thread t2 = new Thread(() => Console.WriteLine("t2线程"));  
    16.     t2.Start();  
    17.   
    18.     //这个就更简洁 ≡(▔﹏▔)≡   
    19.     new Thread(() => Console.WriteLine("t3线程")).Start();  
    20.   
    21.     Console.ReadLine();  
    22.   
    23.     /* 得到结果不能保证哪个结果先输出 
    24.      * 线程由操作系统调度,每次哪个线程在前不同的 
    25.      */  
    26. }  
    27.   
    28. //线程中通过委托ThreadStart调用的方法   
    29. static void ThreadMain()  
    30. {  
    31.     Console.WriteLine("t1线程,线程名:" + Thread.CurrentThread.Name + ",该线程托管ID:" + Thread.CurrentThread.ManagedThreadId);  
    32. }  

    2.给线程传送数据

    方法一:使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据

    1. class Program  
    2. {  
    3.     static void Main(string[] args)  
    4.     {  
    5.         /* 使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据 */  
    6.   
    7.         //初始化给线程传送的数据   
    8.         Data d = new Data();  
    9.         d.Message = "66";  
    10.   
    11.         Thread t1 = new Thread(ThreadMainWithParameters);  
    12.         //使用了ParameterizedThreadStart委托,线程入口必有一object类型参数   
    13.         t1.Start(d);  
    14.   
    15.         Console.ReadLine();  
    16.     }  
    17.   
    18.     //线程中通过委托ParameterizedThreadStart调用的方法   
    19.     static void ThreadMainWithParameters(object o)  
    20.     {  
    21.         Data d = (Data)o;  
    22.         Console.WriteLine("线程t1,传入参数:" + d.Message);  
    23.     }  
    24. }  
    25.   
    26. //给线程传送数据,需要某个存储数据的类或结构   
    27. public struct Data  
    28. {  
    29.     public string Message;  
    30. }  

    方法二:创建一个定制类,把线程的方法定义为实例方法,给线程传送数据

    1. //定制类   
    2. public class MyThread  
    3. {  
    4.     private string data;  
    5.   
    6.     public MyThread(string data)  
    7.     {  
    8.         this.data = data;  
    9.     }  
    10.   
    11.     //线程中通过委托ThreadStart调用的定制类中的实例方法   
    12.     public void ThreadMain()  
    13.     {  
    14.         Console.WriteLine("线程t1,传入参数:" + data);  
    15.     }  
    16. }  
    17.   
    18. class Program  
    19. {  
    20.     static void Main(string[] args)  
    21.     {  
    22.         /* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */  
    23.   
    24.         MyThread obj = new MyThread("66");  
    25.   
    26.         Thread t1 = new Thread(obj.ThreadMain);  
    27.         t1.Start();  
    28.   
    29.         Console.ReadLine();  
    30.     }  
    31. }  

  • 相关阅读:
    在.net C#里怎样调用非托管动态库函数dll?
    Visual C#中的MDI编程
    c#图形装置接口
    粗糙集理论介绍
    Using .NET DataSet in Flex 2
    图象光照研究路线
    基于光照模型应用前景
    使用netsh.exe配置TCP/IP
    vb.net 防止MDI子窗体被多次实例化的四种方法
    一定概率选中某一字母
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/3245640.html
Copyright © 2020-2023  润新知