執行緒間操作無效 從不是建立控制項的執行緒訪問它

2022-02-17 17:07:23 字數 912 閱讀 8386

下面介紹幾種跨執行緒呼叫控制項的方法

這是最簡單的辦法, 相當於不檢查執行緒之間的衝突,允許各個執行緒隨便亂搞,最後lable1控制項的值是什麼就難以預料了 (不推薦使用這種方法)

public

form1()

呼叫控制項的invoke方法,就可以控制控制項了,例如

private

void button2_click(object

sender, eventargs e)

private

void updatelabel2(object

str)

;//或者

//actionactiondelegate = delegate(string txt) ;

this

.label2.invoke(actiondelegate, str);

}else

}

只要把上面的 this.label2.invoke(actiondelegate, str); 中的 invoke 改為begininvoke方法就可以了

invoke方法和begininvoke方法的區別是

invoke方法是同步的, 它會等待工作執行緒完成,

begininvoke方法是非同步的, 它會另起乙個執行緒去完成工作執行緒

private

void button4_click(object

sender, eventargs e)

}void bw_dowork(object

sender, doworkeventargs e)

void bw_runworkercompleted(object

sender, runworkercompletedeventargs e)

執行緒間操作無效 從不是建立控制項「XX」的執行緒訪問它

在進行執行緒方面的程式設計的時,遇到這樣的錯誤 執行緒間操作無效 從不是建立控制項 xx 的執行緒訪問它 解決方法 在建構函式中加入如下 checkforillegalcrossthreadcalls false 訪問 windows 窗體控制項本質上不是執行緒安全的。如果有兩個或多個執行緒操作某一...

執行緒間操作無效 從不是建立控制項的執行緒訪問它

using system using system.threading using system.windows.forms private void button1 click object sender,eventargs e start 出現上述錯誤的原因是 net禁止了跨執行緒呼叫控制項。只...

執行緒間操作無效 從不是建立控制項的執行緒訪問它。

private void button1 click object sender,eventargs e t.start 上面的 會報錯,從新的執行緒訪問其他執行緒的控制項 這是因為.net禁止了跨執行緒呼叫控制項,否則誰都可以操作控制項,最後可能造成錯誤。當然,設定checkforillegalc...