關於INVOKE方法的整理

2021-04-26 20:30:08 字數 1038 閱讀 4675

99%的參考msdn,所以只能算**了,轉的msdn的帖子,o(∩_∩)o~。

由於windows 窗體中的控制項被繫結到特定的執行緒,所以不具備執行緒安全性。因此,如果從另乙個執行緒呼叫控制項的方法,那麼必須使用控制項的乙個 invoke 方法來將呼叫封送到適當的執行緒。

如何確定該控制項是否需要將呼叫封送呢?利用的乙個屬性為invokerequired。通過該屬性可以獲取乙個值,該值指示呼叫方在對控制項進行方法呼叫時是否必須呼叫 invoke 方法,因為呼叫方可能位於建立控制項所在的執行緒以外的執行緒中。尤其是當不知道什麼執行緒擁有控制項時這很有用。

invokerequired屬性返回乙個布林值,如果控制項的 handle 是在與呼叫執行緒不同的執行緒上建立的(說明您必須通過 invoke 方法對控制項進行呼叫),則為true;否則為false

invoke 方法就是這種情況下,在擁有此控制項的基礎視窗控制代碼的執行緒上執行委託。下面是對該方法的過載:

control.invoke (delegate)

在擁有此控制項的基礎視窗控制代碼的執行緒上執行指定的委託。 由 .net compact framework 支援。

control.invoke (delegate, object)

在擁有控制項的基礎視窗控制代碼的執行緒上,用指定的引數列表執行指定委託。 由 .net compact framework 支援。

下面有乙個示例,也是msdn上的。

//定義乙個委託,呼叫時要用到

public delegate void mydelegate(label mycontrol, string myarg2);

private void button_click(object sender, eventargs e)

//這個不用說了,就是處理mytextbox的方法了

public void delegatemethod(label mycontrol, string mycaption)

這樣,就實現了對mytextbox的操作

經過這樣乙個例子,基本上就能明白invoke的意義了

關於Method類的invoke方法

import j a.lang.reflect.method public class invoketester public string echo string mesg public static void main string args throws exception method類的i...

java反射的invoke方法

public static void invoke getmethod第乙個引數是方法名,第二個引數是該方法的引數型別 多個用,隔開 method method clazz.getmethod test string.class method類的invoke object obj,object ar...

php魔術方法 invoke

php5.3新增了乙個叫做 invoke的魔術方法,這樣在建立例項後,可以直接呼叫物件。就是用函式的方式來用物件,比如我現在有個a類,如果我想防止別人直接輸出物件,那麼我可以這樣 class a a new a echo a 那麼就會輸出 不允許這樣使用 invoke 方法,也可以,帶引數 clas...