c#中線程對控制項的訪問
control類提供了乙個invoke方法來給子執行緒訪問主線程的控制項,它的原型是醬紫的:
objectmethod是已建立的委託物件,如果該物件的關聯方法有引數,那就放在陣列args中,沒有就不用傳.control.invoke(delegate method);
object.control.invoke(delegate method,params
object args);
invoke食用方法如下(假設我訪問控制項的方法是getforms()):
public來乙個完整的例子:delegate
void getformsdelegate(getforms的引數宣告);//
宣告乙個與所呼叫的用來訪問控制項的方法匹配的委託型別,引數必須一致
public
void
mythread()
);}
這是使執行緒將學生資訊輸出到listbox控制項的例子
namespacethreadvisitingcontrol
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...