Delegate.BeginInvoke和Thread.Start之间的区别

时间:2010-05-05 11:10:39

标签: .net multithreading

现有相关问题在此讨论:

之间的差异
  • Delegate.BeginInvoke和Control.BeginInvoke
  • Control.BeginInvoke和Thread.Start

但Delegate.BeginInvoke和Thread.Start之间有什么区别?

2 个答案:

答案 0 :(得分:17)

Thread.Start启动一个新的OS线程来执行委托。委托返回时,线程被销毁。这是一个非常重量级的操作(启动和销毁一个线程)所以你通常只在方法长时间运行时才这样做。

Delegate.BeginInvoke将在线程池线程上调用委托。方法返回后,线程将返回到池中以供另一个任务重用。这样做的好处是将方法排队到线程池相对较轻,因为您不必每次都启动一个全新的线程。

Control.BeginInvoke在线程上调用控件的方法。 UI组件本质上是单线程的,并且每次与UI控件的交互都必须在创建它的线程上完成。 Control.BeginInvoke是一种方便的方法。

答案 1 :(得分:2)

有关在.net中运行并发代码的各种方法之间差异的详细信息,请参阅此问题:differences in the different ways to make concurrent programs