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