内容简介:Invoke 與 BeginInvoke 在主副線程中的執行順序和區別
在寫多執行緒時必須更新UI狀態時查到的資料,做個紀錄一下。
據msdn中介紹,它們最大的區別就是BeginInvoke屬於異步執行的。
-
Control.Invoke 方法 (Delegate)
在擁有此控件的基礎窗口句柄的線程上執行指定的委託。 -
Control.BeginInvoke 方法 (Delegate)
在創建控件的基礎句柄所在線程上異步執行指定委託。
總結:
以下為了方便理解,假設如下:
- 主線程表示Control.Invoke或Control.BeginInvoke中Control所在的線程,即創建該創建的線程。 (一般為UI線程)
- 支線程表示不同於主線程的調用Invoke或BeginInvoke的線程。
- Control的Invoke和BeginInvoke的委託方法是在主線程,即UI線程上執行。 (也就是說如果你的委託方法用來取花費時間長的數據,然後更新界面什麼的,千萬別在主線程上調用Control.Invoke和Control.BeginInvoke,因為這些是依然阻塞UI線程的,造成界面的假死)
- Invoke會阻塞主支線程,BeginInvoke只會阻塞主線程,不會阻塞支線程!因此BeginInvoke的異步執行是指相對於支線程異步,而不是相對於主線程異步。 (從最後一個例子就能看出,程序運行點擊button1)
轉載: 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Oricle8i Web开发指南
(美)Bradley D.Brown / 机械工业出版社 / 2001-6 / 78.00元
本书用实际通用的策略,阐明了怎样一起来看看 《Oricle8i Web开发指南》 这本书的介绍吧!