可以有兩中方法:
一種是通過設定system.windows.forms.control.checkforillegalcrossthreadcalls = false;(winform下)如果在你的程式初始化的時候設定了這個屬性,而且在你的控制項中使用的都是微軟framework類庫中的控制項的話,系統就不會再丟擲你上面所說的這個錯誤了。當然這只是為了將vs2003的**轉換到vs2005下所使用的一種常見的方法。不建議採用。
第二種方法就是微軟建議採用的跨執行緒呼叫的一種通用方法,就是使用**來實現,就是將你所要操作的**放到乙個**種,然後將這個**交給建立這個控制項的執行緒來執行你的**。例如:
view code
1上面這種**的方式類似於c++中的**函式,你寫出了執行的方法,然後通知某個執行緒由那個執行緒來呼叫你的這個方法,這樣就做到了在固定的執行緒裡執行修改執行緒內部元件的方式。這樣就完全達到執行緒安全了。private
void form1_load(object
sender, eventargs e) 2
8///
9///
定義乙個**
10/// 11
private
delegate
void
dd();
1213
private
void
backgroundprocess() 14
28};
29listbox1.invoke(dd);
30 }
1try..23
//定義乙個互斥量,用於對listbox的互斥訪問
4 mutex mx=new
mutex();
5public
delegate
void myinvoke(string
str);
6private
void updatelistbox(string
str)713
private
void button1_click(object
sender, eventargs e)
1422
private
void
run1()
23);29}
30}31private
void
run2()
32);37}
38 }
跨執行緒訪問控制項
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...
跨執行緒訪問控制項
程序是作業系統分配資源的最小單位,程序之間隔離,作為資源的擁有者,在建立 cpu處理時切換以及撤銷的過程中花費時間較長,而執行緒是作業系統任務排程的最小單元,對於每個程序中由多個列表內容執行緒執行對應的方法體,完成後立即釋放,這樣作業系統對執行緒處理起來更加容易,實現了併發程式。using syst...
Silverlight 跨執行緒訪問無效
解決辦法有以下幾種1使用 synchronizationcontext 此方法需要注意的是,system.threading.synchronizationcontext.current必須在ui執行緒中呼叫,如果在子執行緒中,將返回null 雙擊 全選 12 3 4 5 6 7 8 9 10 11...