线程使用委托或函数名称

时间:2014-04-04 14:49:02

标签: c# multithreading delegates

奇怪的问题。 使用这些代码有什么区别?

class TestThread {

public void waitFunction() {
   // Some code like this.UpdateProgress()
}

public void start() {
    Thread thWaitingScraper = new Thread(waitFunction);   // Method 1

    Thread thWaitingScraper = new Thread(delegate() { waitFunction(); });   // Method 2
}

谢谢!

1 个答案:

答案 0 :(得分:2)

没有功能差异,但在第二种方法中可能会引起类型泄漏。

当编译器需要在场景后面创建隐式类时会导致Typeleak。在这种情况下,因为t waitFunction是类的非静态成员,所以编译器需要创建一个保存对this类的引用的类,以便可以使用适当的实例调用该函数。在这个类中,它创建了你在第二个方法中编写的匿名方法,并将其作为Thread委托参数传递。