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来避免资源泄漏。
在当前线程执行委托操作,委托只是一个函数方法的引用,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时使用。