以下引用自: c#使用methodinvoker解決跨執行緒訪問控制項
net 原則上禁止跨執行緒訪問控制項,因為這樣可能造成錯誤的發生,有一種方法是禁止編譯器對跨執行緒訪問作檢查,control.checkforillegalcrossthreadcalls = false;可以實現訪問,但是出不出錯不敢保證c#跨執行緒訪問控制項執行時錯誤。
使用methodinvoker即可解決
看看系統定義, 與event 的區別
public delegate void methodinvoker();
public delegate void eventhandler(object sender, eventargs e);
簡單來說 :
methodinvoker 是不帶引數的委託。
eventhandler 是可帶引數的委託
我是這樣理解的, 開啟新執行緒 threadrun, 在新執行緒中使用methodinvoker 委託執行 run()方法,這個時候 run() 方法其實是在主線程中執行的, 這樣就避免了 跨執行緒訪問控制項, 以下是我的測試**:
private void button1_click(object sender, eventargs e)
private void changetext()
private void threadrun()
messagebox.show("mainthread全速運算剛剛結束了");
}private void changetext()
private void threadrun()
可惜並不是我想的那樣, 運**況是先彈出 childthread, 然後彈出 mainthread, 最後才彈出 mainthread全速運算剛剛結束了
有誰可以解釋一下麼???????????? 難道同乙個執行緒也有cpu時間片的概念? 以前聽說過執行緒插入程序, 但沒聽說過 執行緒也可以被插入啊?
C中extern和C 中的export
為了訪問其他編譯單元 如另一 檔案 中的變數或物件,對普通型別 包括基本資料類 結構和類 可以利用關鍵字extern,來使用這些變數或物件時 但是對模板型別,則必須在定義這些模板類物件和模板函式時,使用標準c 新增加的關鍵字export 匯出 出口 輸出 例如 extern int n extern...
C中相容C 操作
在c 中加入c 風格的 在編譯的時候,報錯的是必然的.因為不相容.例如,在c中加入c 的namespace namespace cv get window image rectangle coordinates,width and height cvapi cv rect cvgetwindowim...
C中呼叫C 函式
將 c 函式宣告為 extern c 在你的 c 裡做這個宣告 然後呼叫它 在你的 c 或者 c 裡呼叫 例如 c code extern c void f int void f int i 然後,你可以這樣使用 f c code void f int void cc int i f i 當然,這招...