2015-01-26 50 views
1

對於線程初始化,使用「Threadstart」和不使用「Threadstart」有什麼不同。使用「Threadstart」和不使用「Threadstart」的區別是什麼

// 1. 
Thread worker = new Thread(new ThreadStart(DoTimeConsumingWork)); 
worker.Start(); 

// 2. 
Thread worker = new Thread(DoTimeConsumingWork); 
worker.Start(); 

兩者都在工作。 兩者有什麼區別。

問候 克里斯

+0

我認爲這是由於C#後1.0版本中添加了第二種語法。我知道很多關於代表的語法都比較簡單。 – adv12 2015-01-26 19:31:30

+0

是的,在.NET 1.0和1.1(我認爲)委託構造函數是必需的;從2.0開始,它現在是隱含的。除了一些非常奇怪的邊緣情況,兩者的表現完全相同。 – 2015-01-26 19:44:28

回答

0

沒有區別。編譯器將在編譯時將您的函數引用更改爲委託。

的直接引用

IL代碼:

public delegate void Test(); 
// ... 
Test test = TestMethod; 

IL_0002: ldftn void testcs.Program::TestMethod() 
IL_0008: newobj instance void testcs.Program/Test::.ctor(object, native int) 

,並出現完全相同的IL代碼時,它的構造,如:

Test test = new Test(TestMethod); 

IL_0002: ldftn void testcs.Program::TestMethod() 
IL_0008: newobj instance void testcs.Program/Test::.ctor(object, native int) 

要添加這個: 它更像是一個個人喜好的這你可以做,但在某些情況下,它可能有助於實際聲明委託的可讀性。

1

有沒有真正的區別。在後者中,編譯器正在將您的方法組轉換爲一個ThreadStart代表。

+0

沒錯。如果你使用VB,AddressOf在Thread構造函數中做同樣的事情。 – scottyeatscode 2015-01-26 19:36:26

1

msdn

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

相關問題