很多時候寫windows程式都需要結合多執行緒,經常會跨執行緒操作控制項,這時就會出錯,提示不允許"從不是建立控制項的程序訪問它"。
這個時候的解決思路:把想對另一線程中的控制項實施的操作放到乙個函式中,然後使用delegate**那個函式,並且在那個函式中加入乙個判斷,用invokerequired來判斷呼叫這個函式的執行緒是否和控制項執行緒在同一執行緒中,如果是則直接執行對控制項的操作,否則利用控制項的invoke或begininvoke方法來執行這個**,執行喚醒控制項的操作。
invoke的中文解釋是喚醒,它有兩種引數型別 (delegate, object)和(delegate)
delegate就是前面提到的那個**,而object則是用來存放delegate所**函式的引數
delegate void aa();//定義**
private void ctlinvoke()
else
}
跨執行緒訪問控制項
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...
跨執行緒訪問控制項
程序是作業系統分配資源的最小單位,程序之間隔離,作為資源的擁有者,在建立 cpu處理時切換以及撤銷的過程中花費時間較長,而執行緒是作業系統任務排程的最小單元,對於每個程序中由多個列表內容執行緒執行對應的方法體,完成後立即釋放,這樣作業系統對執行緒處理起來更加容易,實現了併發程式。using syst...
C 程式設計中跨執行緒訪問控制項
c 中不允許跨執行緒直接訪問介面控制項,即乙個執行緒中如主線程建立的控制項不允許被其他執行緒例如子執行緒直接訪問,如果直接訪問或設定屬性則會爆出 呼叫執行緒無法訪問此物件,因為另乙個執行緒擁有該物件 等類似錯誤。在乙個執行緒中設定其他執行緒所有的控制項屬性通常有兩種方法,一是設定system.win...