初試C 多執行緒 跨執行緒訪問控制項

2021-06-29 04:45:00 字數 894 閱讀 6130

c#裡建立執行緒的方式是

thread t = new thread(new threadstart(this.dosomething));

t.start();

裡面的dosomething是主線程裡的乙個函式,在裡面做自己需要的操作。

那我就建了乙個winform程式來試一下,畫了乙個button1,乙個textbox1

原先**是這樣的

public partial class form1 : form

private void button1_click(object sender, eventargs e)

private void change_text()

}

跑出來,按了一下button1就報異常了,內容是說不能跨執行緒訪問控制項,也就是說新開的執行緒裡跑的函式不能修改主視窗的textbox內容。

在網上找了一下解決方法,有人用的是**,解決也比較簡單,就宣告乙個**,在新執行緒的操作函式裡例項化乙個匿名**,在裡面完成操作,需要修改的**如下:

public partial class form1 : form

private void button1_click(object sender, eventargs e)

private delegate void crossthreadoperationcontrol();//跨執行緒訪問空間**

private void change_text()

;textbox1.invoke(ctoc);}}

c 跨執行緒訪問控制項

訪問 windows 窗體控制項本質上不是執行緒安全的。如果有兩個或多個執行緒操作某一控制項的狀態,則可能會迫使該控制項進入一種不一致的狀態。還可能出現其他與執行緒相關的 bug,包括爭用情況和死鎖。所以,確保以執行緒安全方式訪問控制項是非常重要的。private static object dat...

跨執行緒訪問控制項

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