C 中MethodInvoker的理解

2021-07-03 17:25:08 字數 1018 閱讀 2599



以下引用自:   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 當然,這招...