InvokeRequired屬性與Invoke方法

2022-09-20 05:51:14 字數 1307 閱讀 8501

msdn中說:

獲取乙個值,該值指示呼叫方在對控制項進行方法呼叫時是否必須呼叫 invoke 方法,因為呼叫方位於建立控制項所在的執行緒以外的執行緒中。如果控制項的 handle 是在與呼叫執行緒不同的執行緒上建立的(說明您必須通過 invoke 方法對控制項進行呼叫),則為 true;否則為 false。windows 窗體中的控制項被繫結到特定的執行緒,不具備執行緒安全性 。因此,如果從另乙個執行緒呼叫控制項的方法,那麼必須使用控制項的乙個 invoke 方法來將呼叫封送到適當的執行緒。該屬性可用於確定是否必須呼叫 invoke 方法,當不知道什麼執行緒擁有控制項時這很有用。

結合在專案中遇到的乙個例子:

1

public

partial

class

progressform : form 56

public

void showmessage(string msg,bool

cancancel) ));

13 } else17}

1819

public

void

closeform() else25}

2627

public

void

showerror(exception exception) else34}

3536

private

void

displayerror(exception e)

4243

private

void _btncancel_click(object

sender, eventargs e) 47}

4849

public

event

action cancelclick;

5051 }

簡單的說,如果有兩個執行緒,thread a和thread b,並且有乙個control c,是在thread a裡面new的。

那麼在thread a裡面執行的任何方法呼叫c.invokerequired都會返回false。

相反,如果在thread b裡面執行的任何方法呼叫c.invokerequired都會返回true。

是否是ui執行緒與結果無關。(通常control所在的執行緒是ui執行緒,但是可以有例外)

也可以認為,在new control()的時候,control用乙個變數記錄下了當前執行緒,在呼叫invokerequired時,返回當前執行緒是否不等於new的時候記錄下來的那個執行緒。如果invokerequired==true表示其它執行緒需要訪問控制項,那麼呼叫invoke來轉給控制項owner處理。

android layout weight屬性學習

雖然這個android layout weight屬性很怪異,但幸運的是我們達到了目標 按比例顯示linearlayout內各個子控制項,需設定android layout width 0dp 如果為豎直方向的設定android layout height 0dp 在這種情況下某子個控制項占用lin...

ios autoresizingMask屬性的研究

在 uiview 中有乙個autoresizingmask的屬性,它對應的是乙個列舉的值 如下 屬性的意思就是自動調整子控制項與父控制項中間的位置,寬高。1 2 3 4 5 6 7 8 9 enum uiviewautoresizingnone就是不自動調整。uiviewautoresizingfl...

windowSoftInputMode屬性詳解

android windowsoftinputmode是activity主視窗與軟鍵盤的互動模式,可以用來避免輸入法面板遮擋問題,是android1.5後的乙個新特性。這個屬效能影響兩件事情 一 當有焦點產生時,軟鍵盤是隱藏還是顯示。二 是否減少活動主視窗大小以便騰出空間放軟鍵盤。它的設定必須是下面...