Control.BeginInvoke vs. delegate.BeginInvoke(1)

参考:

http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html

http://blog.csdn.net/simonezhlx/archive/2007/07/27/1711927.aspx

http://www.go4expert.com/forums/showthread.php?t=3124

区别:

 Method                            Return           Work Thread
Control.Invoke                   完成工作         强制 UI Thread
Control.BeginInvoke             立即            强制 UI Thread
[delegate].Invoke               完成工作        Call Invoke 的 Thread
[delegate].BeginInvoke          立即           新的ThreadPool中 Thread

Delegate.Invoke
在当前线程执行委托操作,委托只是一个函数方法的引用,Delegate.invoke调用该函数的机制。

Delegate.BeginInvoke
用来在一个单独的线程异步执行委托。该委托的执行不会阻塞当前线程,而是在一个单独的线程执行。有时需要调用EndInvoke来避免资源泄漏。
 
在此线程中,不能调用更新UI的函数,如果完成此任务需要使用:Control.Invoke和Control.BegionInvoke.

Control.Invoke
Control.Invoke 用来同步执行所属UI线程的委托。你可以在其它线程中调用此操作来更新UI。此操作为阻塞操作,直到UI 线程完成任务后才返回调用线程。

Control.BeginInvoke

Control.BeginInvoke 用来异步执行所属UI线程的委托。你可以在其它线程中调用此操作来更新UI。此操作为非阻塞操作,调用UI 线程后立即返回。

Control.Invoke, Control.BeginInvoke, and Control.InvokeRequired 一般在其他工作线程更新UI时使用。
原文地址:https://www.cnblogs.com/jyz/p/1278445.html