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

6 .net multithreading

这里现有的相关问题涉及以下方面的差异

  • Delegate.BeginInvoke和Control.BeginInvoke
  • Control.BeginInvoke和Thread.Start

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

Dea*_*ing 17

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

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

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