給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 /// <summary> 8 /// 線程中執行的方法,該方法只能接受一個Object類型的對象 9 /// </summary> 10 /// <param name="obj"></param> 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 /// <summary> 7 /// 線程中執行的方法,該方法只能接受一個Object類型的對象 8 /// </summary> 9 /// <param name="obj"></param> 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 }