对于线程初始化,使用" Threadstart"的区别是什么?并且不使用" Threadstart"。
// 1.
Thread worker = new Thread(new ThreadStart(DoTimeConsumingWork));
worker.Start();
// 2.
Thread worker = new Thread(DoTimeConsumingWork);
worker.Start();
两者都有效。 两者有什么区别。
此致 krrish
答案 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)
要添加: 这更像是一个人的偏好,你做了哪一个,但在某些情况下,它可能有助于实际宣布代表的可读性。