轉 跨執行緒訪問

2022-02-23 01:59:01 字數 1252 閱讀 8076

可以有兩中方法:

一種是通過設定system.windows.forms.control.checkforillegalcrossthreadcalls = false;(winform下)如果在你的程式初始化的時候設定了這個屬性,而且在你的控制項中使用的都是微軟framework類庫中的控制項的話,系統就不會再丟擲你上面所說的這個錯誤了。當然這只是為了將vs2003的**轉換到vs2005下所使用的一種常見的方法。不建議採用。

第二種方法就是微軟建議採用的跨執行緒呼叫的一種通用方法,就是使用**來實現,就是將你所要操作的**放到乙個**種,然後將這個**交給建立這個控制項的執行緒來執行你的**。例如: 

view code

1

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 }

上面這種**的方式類似於c++中的**函式,你寫出了執行的方法,然後通知某個執行緒由那個執行緒來呼叫你的這個方法,這樣就做到了在固定的執行緒裡執行修改執行緒內部元件的方式。這樣就完全達到執行緒安全了。 

1

try..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...