兩個都是執行**,但也有不同。
control.begininvoke( action ) :
經常我們會用到 control.begininvoke( action ),但很多人會誤解以為 control.begininvoke() 是非同步。其實不是那樣,control.begininvoke( action ) 只是將 action 封裝到訊息中,然後插入到ui執行緒(建立control的執行緒)的訊息佇列尾部,也就是說執行還是在ui執行緒中。
但當 delegate.begininvoke( callback ) 這時才是真正的非同步!
control.invoke( action ) :
就更好理解了,就是簡單的執行action(同步方式) , 和我們呼叫乙個方法一樣。但control.invoke( action ) 也是在ui(建立control的執行緒)執行緒中執行,即使是在乙個新執行緒(非ui執行緒)裡呼叫 control.invoke( action ) ,也是在ui執行緒中執行 。
是否記得,「跨執行緒操作控制項」的時候我們會將操作控制項的語句,封裝到乙個**(delegate)中,然後使用 control.invoke( delegate )。其原理就是:把操作控制項的語句放到了ui執行緒(建立控制項中線程)中去執行,這樣就保障了執行緒安全。
C invoke和begininvoke 的區別
invoke和begininvoke 區別 一直對invoke和begininvoke的使用和概念比較混亂,這兩天看了些資料,對這兩個的用法和原理有了些新的認識和理解。首先說下,invoke和begininvoke的使用有兩種情況 control中的invoke begininvoke。delegr...
Invoke 和 BeginInvoke 的區別
討論環境 c net vs2005 net預設所有的可視窗體在主線程內維護,如果某工作執行緒 主線程之外 想實現對窗體控制項的操作,預設情況下是不允許直接操作的,而要通過 invoke 方法將其封送到主線程去完成。在control 類內提供了 invoke 和 begininvoke 兩個方法實現該...
避免執行緒切換時的BeginInvoke之舞
何謂begininvoke之舞.delegate void myhandlerdelegate void myhandler dogui stuff 在做多執行緒的程式時,我們常常在經過大量計算後,要將結果反饋給ui.如果在多執行緒時,直接給ui的更新的話,會引發異常.相信大家都遇上過這樣的問題,同...