今天我們繼續接著執行緒講講,上一章提到一下task概念,
首先接著task繼續往下講,在前章節提到過thread怎麼實現其他執行緒完成後再讓主線程繼續執行的功能,那麼如果task也需要執行緒等待事件,該怎麼實現呢?
在這裡介紹四種方法。
1、continuewhenany方法
taskfactory.continuewhenany(tasklist.toarray(), t =>這種做法是在等task物件list集合中的任何乙個執行緒完成後執行**函式。", thread.currentthread.managedthreadid);
});
2、continuewhenall方法
taskfactory.continuewhenall(tasklist.toarray(), tlist =>這種是等list集合全部完成後在執行,在執行**函式", thread.currentthread.managedthreadid);
});
3、waitany方法
task.waitany(tasklist.toarray());//執行的執行緒等待某乙個task的完成只要等待其中任何乙個執行緒完成,就會繼續後面的程式**。
4、waitall方法
task.waitall(tasklist.toarray());//執行的執行緒等待全部的task的完成等待多有執行緒完成後再去執行後面程式**。
一般來說有這四種方法,可以解決等待事件的所有需求,如果不能實現,那有可能是程式設計上有些問題了。
parallel:這個是.net後面提出的概念
parallel.invoke(() => this.testthread("btnparallel_click_0"), () => this.testthread("btnparallel_click_1")
, () => this.testthread("btnparallel_click_2")
, () => this.testthread("btnparallel_click_3")
, () => this.testthread("btnparallel_click_4"));
//等於使用4個task,然後主線程同步invoke乙個委託 然後主線程waitall
這種做法就是讓主線程也參與在計算中,充分利用資源吧。
parallel.for(6, 10, t =>", t);
this.testthread(name);
});parallel.foreach(new int , t =>
", t);
this.testthread(name);
});paralleloptions paralleloptions = new paralleloptions()
;parallel.for(6, 15, (t, state) =>
", t);
this.testthread(name);
console.writeline(state);
state.break();//退出單次迴圈
state.stop();//退出全部的迴圈
return;
});
多執行緒 Thread
如果從另外乙個執行緒操作windows窗體上的控制項,就會與主線程產生競爭,造成不可預料的後果,甚至死鎖。因此,windows gui程式設計有乙個規則 只能通過建立控制項的執行緒來操作控制項的資料!實現方法 要從執行緒外操作windows控制項,那麼就要使用invoke或begininvoke方法...
Thread執行緒類
posted on 2011 05 03 10 45 明天陪你看海 閱讀 123 編輯收藏 說明 apartmentstate 獲取或設定此執行緒的單元狀態 currentcontext 獲取執行緒正在其中執行的當前上下文 currentthread 獲取當前正在執行的執行緒 isalive 獲取乙...
Thread執行緒類
posted on 2011 05 03 10 45 明天陪你看海 閱讀 123 編輯收藏 說明 apartmentstate 獲取或設定此執行緒的單元狀態 currentcontext 獲取執行緒正在其中執行的當前上下文 currentthread 獲取當前正在執行的執行緒 isalive 獲取乙...