C#从零开始学线程_003_给Thread线程传参
给Thread线程传递参数,一般有两种方法
- 通过Thread的Start()方法给线程传递参数,这种方法只能传递一个Object类型的参数;
- 通过lambda表达式给Thread线程传递参数,这种方式可以给线程中的函数传递多个参数。
通过Thread的Start()方法给线程传递参数:
1 internal void Do() 2 { 3 Thread t = new Thread(Method); //创建一个Thread对象t, 4 t.Start("Hello"); //通过Start方法将参数传递给给线程,该方法只能接受一个Object类型的对象 5 } 6 7 ///8 /// 线程中执行的方法,该方法只能接受一个Object类型的对象 9 /// 10 /// 11 private void Method(object? obj) 12 { 13 Console.WriteLine(obj.ToString()); 14 }
可以简写成一下的形式:
1 internal void Do() 2 { 3 new Thread(Method).Start("Hello"); //创建一个Thread对象t,并通过Star方法启动线程,且向线程传递参数 4 } 5 6 ///7 /// 线程中执行的方法,该方法只能接受一个Object类型的对象 8 /// 9 /// 10 private void Method(object? obj) 11 { 12 Console.WriteLine(obj.ToString()); 13 }
通过lambda表达式给Thread线程传递多个参数
1 internal void Do() 2 { 3 Thread t = new Thread(() => Method(2, 3)); //通过lambda表达式来给线程中的函数传递两个参数 4 t.Start(); 5 } 6 7 private void Method(int i, int j) 8 { 9 Console.WriteLine((i + j).ToString()); 10 }
也可以简写为下面的形式
internal void Do() { new Thread(() => Method(2, 3)).Start(); //通过lambda表达式来给线程中的函数传递两个参数 } private void Method(int i, int j) { Console.WriteLine((i + j).ToString()); }
在线程中调用带返回值的函数:
1 internal void Do() 2 { 3 new Thread(() => 4 { 5 int result = Method(2, 3); 6 Console.WriteLine(result); 7 }).Start(); //通过lambda表达式来给线程中的函数传递两个参数,并获取返回值 8 }