2011-12-13 80 views
2

我是.NET新手。我在我的項目中使用線程。請檢查我的代碼如下 -線程VS ParameterizedThreadStart

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace ConsoleApplication6 
{ 
    class Program 
    { 
     private void Amadeus(object str) 
     { 
      Console.WriteLine(str.ToString()); 
     } 

     static void Main(string[] args) 
     { 
      Program objClass = new Program(); 

      //One way to call Amadeus Method... 
      Thread objThread = new Thread(objClass.Amadeus); 
      objThread.Start("Amadeus without ParameterizedThreadStart"); 

      //Other way to call Amadeus Method... 
      ParameterizedThreadStart objParamThread = new ParameterizedThreadStart(objClass.Amadeus); 
      Thread ObjThreadParam = new Thread(objParamThread); 
      ObjThreadParam.Start("Amadeus with ParameterizedThreadStart"); 

      Console.ReadLine(); 
     } 
    } 

} 

請問上述兩種方式之間有什麼區別,因爲兩者都在做同樣的工作。

在此先感謝。

回答

1

兩者都是相同的。閱讀MSDN documentation

Visual Basic和C#用戶可以在創建線程時省略ThreadStart或 ParameterizedThreadStart委託構造函數。 在Visual Basic中,將方法 傳遞給線程構造函數時使用AddressOf運算符;例如,Dim t As New Thread(AddressOf ThreadProc)。在C#中,只需指定線程過程的名稱即可。 編譯器選擇正確的委託構造函數。

1

是的,兩者都在做同樣的事情。

您可以通過傳遞帶有ThreadStart(void ThreadStart())或ParameterisedThreadStart(void ParameterisedThreadStart(Object x))簽名的函數來創建線程。

編譯器正在計算出您要傳入構造函數的參數類型調用哪個構造函數。