C 中線程對控制項的訪問

2021-08-14 10:44:30 字數 1046 閱讀 6189

c#中線程對控制項的訪問

control類提供了乙個invoke方法來給子執行緒訪問主線程的控制項,它的原型是醬紫的:

object

.control.invoke(delegate method);

object.control.invoke(delegate method,params

object args);

method是已建立的委託物件,如果該物件的關聯方法有引數,那就放在陣列args中,沒有就不用傳

invoke食用方法如下(假設我訪問控制項的方法是getforms()):

public

delegate

void getformsdelegate(getforms的引數宣告);//

宣告乙個與所呼叫的用來訪問控制項的方法匹配的委託型別,引數必須一致

public

void

mythread()

);}

來乙個完整的例子:

這是使執行緒將學生資訊輸出到listbox控制項的例子

namespace

threadvisitingcontrol

private

void showstuifo(string no, string name, double score) //

本例中的執行緒要通過這個方法來訪問主線程中的控制項

public

delegate

void stuinfodelegate(string no, string name, double score); //

宣告委託型別

private

void stuthread() //

執行緒方法

); //

執行緒通過方法的委託執行showstuifo(),實現對listbox控制項的訪問

}

private

void button1_click(object

sender, eventargs e)

}}**:

c 跨執行緒訪問控制項

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

C 中線程的用法

通過委託的方式建立執行緒 static int sum int x return x x funca sum 建立乙個新的執行緒格式 a.begininvoke 10 獲取乙個執行緒的返回值 iasyncresult ar a.begininvoke 10,null,null 第二種方法 iasyn...

c 中線程池

只有乙個前台執行緒在執行,應用程式的程序就在執行,如果多個前台執行緒在執行,但是main方法結束了,應用程式的程序任然是執行的,指導所有的前台執行緒完成其任務為止。在預設情況下,用thread建立的執行緒都是前台執行緒,執行緒池中的執行緒總是後台執行緒。在用thread類建立執行緒的時候,可以設定i...