Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Delegate.BeginInvoke和Thread.Start之间的差异_.net_Multithreading - Fatal编程技术网

.net Delegate.BeginInvoke和Thread.Start之间的差异

.net Delegate.BeginInvoke和Thread.Start之间的差异,.net,multithreading,.net,Multithreading,此处存在的相关问题讨论了以下方面的差异: Delegate.BeginInvoke和Control.BeginInvoke Control.BeginInvoke和Thread.Start 但是Delegate.BeginInvoke和Thread.Start之间有什么区别呢?Thread.Start启动一个新的操作系统线程来执行委托。当委托返回时,线程被销毁。这是一个相当繁重的操作(启动和销毁线程),因此通常只有在该方法将长期运行时才执行 Delegate.BeginInvoke将调用线程

此处存在的相关问题讨论了以下方面的差异:

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

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

Thread.Start
启动一个新的操作系统线程来执行委托。当委托返回时,线程被销毁。这是一个相当繁重的操作(启动和销毁线程),因此通常只有在该方法将长期运行时才执行

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

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

  • Delegate.BeginInvoke使用来执行方法()

  • 创建一个完整的新线程

请参阅此问题:有关在.net中运行并发代码的各种方式之间的差异的更多信息