訪問UI介面控制項

2022-03-24 11:23:13 字數 2275 閱讀 8025

多工的處理有兩種不同的型別:基於程序和基於執行緒。理解這兩者間的區別很重要。乙個程序

(process)

本質上乙個正在執行的程式。因此,基於程序的多工處理

(process-based multitasking)

允許計算機同時執行兩個或多個程式。例如,在我們使用電子**或瀏覽

internet

的同時,還可以執行字處理程式,聽聽喜歡的**等等。因此,基於程序的多工處理中,程式是排程程式能夠排程的最小單元。

執行緒(thread)

則是乙個可執行**的排程單元,它的名稱**於概念「執行的執行緒化」。在基於執行緒的多工處理環境中,所有程序都至少有乙個執行緒,而且可以有更多。這意味著乙個程式能夠一次執行兩個或多個操作,例如,乙個文字編輯器可以在列印的同時格式化文字,只要這兩個動作能由兩個獨立的執行緒執行即可。

基於程序的多工處理和基於程序的多工處理之間的不同歸納如下:基於程序的多工是處理併發執行的程式,而基於執行緒的多工處理則是處理同乙個程式中併發執行的不同程式段。

多執行緒的主要優點是它使人們能夠編寫高效的程式,可能大家知道,大多數

i/o裝置,不管是網路介面、磁碟驅動器、還是鍵盤,其執行速度都比

cpu速度慢的多。因此程式往往需要花費大量的時間來等待傳送(接收)

i/o裝置上的資訊。通過使用多執行緒,程式能夠在它的空閒時間執行另乙個任務。提高了

cpu的使用效率。

.net

中使用者介面執行緒是獨立的,

如果有兩個或多個執行緒操作某一控制項的狀態則可能會迫使該控制項進入一種不一致的狀態。還可能出現其他與執行緒相關的 bug,包括爭用情況和死鎖。確保以執行緒安全方式訪問控制項非常重要。

.net framework

有助於在以非執行緒安全方式訪問控制項時檢測到這一問題。在偵錯程式中執行應用程式時,如果建立某控制項的執行緒之外的其他執行緒試圖呼叫該控制項,則偵錯程式會引發乙個 invalidoperationexception,並提示訊息:「從不是建立控制項 control name 的執行緒訪問它。」

此異常在除錯期間和執行時的某些情況下可靠地發生。強烈建議您在顯示此錯誤資訊時修復此問題。在除錯以 .net framework 2.0 版之前的 .net framework 編寫的應用程式時,可能會出現此異常。從vs2003過度到vs2005中的程式我們需要加入一句**才可執行:

system.windows.forms.control.checkforillegalcrossthreadcalls = false;

下面是我們常用的方式:

1.查詢控制項的 invokerequired 屬性。

2.如果invokerequired返回true,則使用實際呼叫控制項的委託來呼叫 invoke。

3.如果invokerequired返回false,則直接呼叫控制項。

在下面的**示例中,此邏輯是在乙個稱為

settext

的實用工具方法中實現的。名為

settextdelegate

的委託型別封裝

settext

方法。textbox控制項的invokerequired返回true時,

settext

方法建立

settextdelegate

的乙個例項,並呼叫窗體的invoke方法。這使得

settext

方法被建立textbox控制項的執行緒呼叫,而且在此執行緒上下文中將直接設定text屬性。

public

partial

class

form1 : form

delegate

void

settextcallback(string text);

private

thread demothread = null;

private

void btnrun_click(object sender, eventargs e)

private

void settext(string text)

); //

將修改控制項屬性的方法交給建立控制項執行緒來完成

}else

}private

void threadprocunsafe()}}

通過以上方式,我們可以很輕鬆的訪問ui介面的控制項了

非UI執行緒訪問控制項

在vs2003之後的版本中,net加強了執行緒安全方面,非ui執行緒是不能直接訪問控制項的。這要求我們對控制項進行執行緒安全方式的呼叫。當然,我們也可以這樣做 checkforillegalcrossthreadcalls false 這個屬性包含在 system.windows.forms 中 這...

WIN FORM 多執行緒更新UI 介面控制項

方法1,更新單個控制項 public delegate void controltextmethod control control,string text private void setcontroltext control control,string text else 需要更新控制項的te...

QT 5 9 8 UI介面控制項介紹

布局管理器 所謂 gui 介面,歸根結底,就是一堆元件的疊加。我們建立乙個視窗,把按鈕放上面,把圖示放上面,這樣就成了乙個介面。在放置時,元件的位置尤其重要。我們必須要指定元件放在 以便視窗能夠按照我們需要的方式進行渲染。這就涉及到元件定位的機制。qt 提供了兩種元件定位機制 絕對定位和布局定位。絕...