參考:
有兩種方法可以選擇:
1、在程式初始化的時候對要操作的控制項設定下面的屬性:
system.windows.forms.control.checkforillegalcrossthreadcalls = false;
這樣,系統就不會再丟擲上面所說的這個錯誤了。
從實質上說,該方法是通過採用取消執行緒安全保護模式的方式實現的,所以不建議採用。
2、基本思路如下:
把想對另一線程中的控制項實施的操作放到乙個函式中,然後使用delegate**那個函式,並且在那個函式中加入乙個判斷,用invokerequired 來判斷呼叫這個函式的執行緒是否和控制項執行緒處於同一執行緒中,如果是則直接執行對控制項的操作,否則利用該控制項的invoke或begininvoke方法來執行這個**。
示例**如下(假設此控制項為treeview控制項,名字為函式中treeviewfiled):
操作控制項的方法:
private void initialtreeview(caseform caseform)
else
}
定義委託:
private delegate void initialtreeviewdelegate(caseform caseform);
然後就可以直接在子執行緒中呼叫initialtreeview方法
在子執行緒中操作主線程
當android啟動activity時,會先啟動乙個主線程 也稱為ui執行緒 用於控制activity的當前view介面,在主線程控制的過程中,子執行緒是不能直接更新主線程資料的,但是android中提供了很多其他執行緒操作ui執行緒的方法 方法一 activity.runonuithread ru...
C 跨執行緒操作控制項 子執行緒修改主線程式控制件
3.子執行緒修改主線程式控制件 1 錯誤的直接使用 1 voidchangetext 2 效果圖 2 關閉跨執行緒的檢查 1 checkforillegalcrossthreadcalls false 效果圖 注 引數型別是object型 1 public delegate void changet...
C 執行緒呼叫主線程中的控制項
由於專案的需要,最近幾天一直在做串列埠和資料庫。由於c 使用的時間不長,所以在編寫 和除錯的過程中總是遇到意想不到的問題,比如在使用串列埠接收資料的時候,在接收資料事件中想把接收的資料放入乙個textbox作顯示,但是明明非常簡單的 在編譯的時候總是提示有錯誤。後來檢視網上資料,才知道c 還有委託,...