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 }