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 /// <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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM