執行緒間操作無效
:從不是建立控制項「…
」的執行緒訪問它。它在
vs2003
裡邊不會出現這個問題,在
vs2005
和vs2008
版本裡就會出這個問題的,主要是為了安全考慮哦,目前我知道的解決方法有兩個…
第一:使用遮蔽線程間進行不安全監測的方法。
control.checkforillegalcrossthreadcalls =
false
;執行緒開始的時候加這麼一句,
ok,看不到錯誤了
^_^,啥都能用了……
第二:使用委託的方法,在
05裡,每個控制項都有個
invokerequired
的屬性~
,判斷一下是不是
true
,是的話進行
invoke
操作的,完事了~
//建立個委託
private
delegate
string
returnstrdelegate();
//搞個最簡單滴取值滴方法
~private
string
returnschool()
//判斷一下是不是該用
invoke滴~
,不是就直接返回
~private
string
returncb(returnstrdelegate mydelegate)
else}
//別的執行緒裡的呼叫哇
~string
_school = returncb(returnschool);
對使用這兩種方法的點評:第一種方法較為簡單,但是第二種方法最為安全,主要是因為:使用第一種方法只是簡單的將錯誤提示禁用了,仍然存在跨執行緒呼叫控制項的問題。為此可能造成兩個執行緒同時或者迴圈改變該控制項的狀態導致執行緒死鎖。第二種使用的
invoke
方法是執行緒同步的方法,所以執行過程是有先後順序的,所以就不會出現那個異常了,使用過程中不會造成執行緒間相互呼叫時造成的死鎖。如果執行緒間出現了相互呼叫,建議使用第二種方法來考慮執行緒間呼叫出現死鎖的安全問題;如果執行緒間並沒有出現相互呼叫,屬於併發執行緒,則使用第一種方法效率更高。
注意:第二種方法是用委託將方法呼叫的時機進行了排序卻不能達到兩個方法並行執行的效果,安全是安全了卻也把同步功能的效果費掉了,大家在使用時綜合考慮使用哪種方法。
執行緒間操作無效 從不是建立控制項「XX」的執行緒訪問它
在進行執行緒方面的程式設計的時,遇到這樣的錯誤 執行緒間操作無效 從不是建立控制項 xx 的執行緒訪問它 解決方法 在建構函式中加入如下 checkforillegalcrossthreadcalls false 訪問 windows 窗體控制項本質上不是執行緒安全的。如果有兩個或多個執行緒操作某一...
執行緒間操作無效 從不是建立控制項的執行緒訪問它
using system using system.threading using system.windows.forms private void button1 click object sender,eventargs e start 出現上述錯誤的原因是 net禁止了跨執行緒呼叫控制項。只...
執行緒間操作無效 從不是建立控制項的執行緒訪問它
下面介紹幾種跨執行緒呼叫控制項的方法 這是最簡單的辦法,相當於不檢查執行緒之間的衝突,允許各個執行緒隨便亂搞,最後lable1控制項的值是什麼就難以預料了 不推薦使用這種方法 public form1 呼叫控制項的invoke方法,就可以控制控制項了,例如 private void button2 ...