使用“Threadstart”和不使用“Threadstart”有什么区别

时间:2015-01-26 19:30:16

标签: c#

对于线程初始化,使用" Threadstart"的区别是什么?并且不使用" Threadstart"。

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

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

两者都有效。 两者有什么区别。

此致 krrish

3 个答案:

答案 0 :(得分:1)

没有真正的区别。在后者中,编译器正在将您的方法组转换为ThreadStart委托。

答案 1 :(得分:1)

来自msdn

  

Visual Basic和C#用户可以省略   所述的ThreadStart或ParameterizedThreadStart委托   创建线程时的构造函数。在Visual Basic中,使用   传递方法时的theAddressOf运算符   的Thread的构造;   例如,Dim t As New Thread(AddressOf ThreadProc)。在C#中,简单地说   指定线程过程的名称。编译器选择   正确的委托构造函数。

答案 2 :(得分: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)

要添加: 这更像是一个人的偏好,你做了哪一个,但在某些情况下,它可能有助于实际宣布代表的可读性。