现有相关问题在此讨论:
之间的差异但Delegate.BeginInvoke和Thread.Start之间有什么区别?
答案 0 :(得分:17)
Thread.Start
启动一个新的OS线程来执行委托。委托返回时,线程被销毁。这是一个非常重量级的操作(启动和销毁一个线程)所以你通常只在方法长时间运行时才这样做。
Delegate.BeginInvoke
将在线程池线程上调用委托。方法返回后,线程将返回到池中以供另一个任务重用。这样做的好处是将方法排队到线程池相对较轻,因为您不必每次都启动一个全新的线程。
Control.BeginInvoke
在线程上调用控件的方法。 UI组件本质上是单线程的,并且每次与UI控件的交互都必须在创建它的线程上完成。 Control.BeginInvoke
是一种方便的方法。
答案 1 :(得分:2)
Delegate.BeginInvoke使用ThreadPool执行方法(See MSDN)。
Thread.Start创建一个全新的主题。
有关在.net中运行并发代码的各种方法之间差异的详细信息,请参阅此问题:differences in the different ways to make concurrent programs。