c# 多线程学习(1):thread 传参,传函数指针;

1, Thread 类的  实现线程其构造函数 有两种委托类型,一种是ThreadStart 委托,就是比Acton委托多了【comvisible】?的特性,就是启动线程,不用带参数的;另一种是ParameterizedThreadStart,似乎类似于Func<obj>,多了特性;

相对应,启动线程是无参和有参的;

 

 1  static void Main(string[] args)
 2         {
 3             int n = 5;
 4             for (int i = 0; i < 20; i++)
 5             {
 6                 ///obj 任意类型可以对obj传参,基本类型使用的时候似乎不用转换;
 7                 Thread td = new Thread((obj) => Console.WriteLine($"obj={obj}"));
 8                 td.Start(i);
 9             }
10             ///线程不带参,传递是ThreadStart 委托;
11             Thread td1 = new Thread(() => { Console.WriteLine("td1,hello"); });
12             Thread td2 = new Thread(hi);
13             
14 
15             ///委托相当于本地函数,可以访问无妨碍访问本地变量。但本地函数没有委托灵活
16             void hi()
17             {
18                 Console.WriteLine(n);
19             }
20 
21 
22             td1.Start();
23             td2.Start();
24             Console.Read();
25         }

 

对于传参 有点风骚的是,可以是NEW ACTION(.....) 这种lamda 表达式;

风骚的代码;  传递lamda ,可以利用线程的封装;;

更正,lamda 似乎也分传值和传值对象的 不同;;

比如  不能完全看同 ()=>cosole.writeline("hello")  和new action(()=>cosole.writeline("hello"));

 

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             int n = 5;
 6             for (int i = 0; i < 20; i++)
 7             {
 8                 ///obj 任意类型可以对obj传参,基本类型使用的时候似乎不用转换;
 9                 Thread td = new Thread((obj) => { (obj as Action)(); });
10                 td.Start(new Action(()=> { Console.WriteLine("hello,im not lamda"); }));
11             }
12             ///线程不带参,传递是ThreadStart 委托;
13             Thread td1 = new Thread(() => { Console.WriteLine("td1,hello"); });
14             Thread td2 = new Thread((obj) => { (obj as Action)(); });
15             
16 
17             ///委托相当于本地函数,可以访问无妨碍访问本地变量。但本地函数没有委托灵活
18             void hi()
19             {
20                 Console.WriteLine("hello");
21             }
22 
23 
24             td1.Start();
25 
26             ///风骚
27             td2.Start(new Action(hi));
28             Console.Read();
29         }
30     }

 

posted @ 2020-09-24 22:37  兰梦书生  阅读(703)  评论(0)    收藏  举报