子線程中開啟子線程 如何控制子線程被執(zhí)行完才執(zhí)行主線程?
如何控制子線程被執(zhí)行完才執(zhí)行主線程? 線程。連接沒關(guān)系。為什么稱之為線程隊(duì)列?線程根本不排隊(duì),執(zhí)行后會(huì)消失。但是,主線程必須阻塞等待這些連接的線程,這不會(huì)浪費(fèi)CPU。不,不,@趙杰定義一個(gè)委托回調(diào)函數(shù)
如何控制子線程被執(zhí)行完才執(zhí)行主線程?
線程。連接沒關(guān)系。為什么稱之為線程隊(duì)列?線程根本不排隊(duì),執(zhí)行后會(huì)消失。但是,主線程必須阻塞等待這些連接的線程,這不會(huì)浪費(fèi)CPU。不,不,@趙杰
定義一個(gè)委托回調(diào)函數(shù)
public delegate void callbackdelegate(字符串消息)
程序啟動(dòng)時(shí)
//將回調(diào)方法賦給委托變量
callbackdelegate CBD=callback
//start thread
thread th=new thread(fun)開始(CBD)//啟動(dòng)thread,并替換參數(shù)
//參數(shù)為委托的線程執(zhí)行方法。線程中的參數(shù)需要使用對(duì)象類型。
public void fun(object o)
{
//這是您的操作代碼,loop,根據(jù)while
while(true)
{
}
//將傳遞的參數(shù)轉(zhuǎn)換為委托
callbackdelegate CBD=O as callbackdelegate
//執(zhí)行回調(diào)。
CBD(“此線程返回的信息”
]}
]//回調(diào)方法
私有void回調(diào)(字符串消息){
//主線程報(bào)告信息,可以用來判斷和執(zhí)行不同的邏輯MessageBox.顯示(message)
}
c#子線程執(zhí)行完怎么通知主線程?
首先,子線程必須由主線程啟動(dòng),所以嚴(yán)格來說,子線程結(jié)束后不可能執(zhí)行主線程。您的意思應(yīng)該是:在主線程創(chuàng)建了子線程之后,等待子線程退出,然后繼續(xù)。代碼沒有太大問題,只是join方法的位置不正確。螺紋1。Start()//啟動(dòng)所有子線程thread2。開始()線程3。開始()線程4。開始()線程5。開始()線程1。Join()//然后等待子線程退出thread2。Join()線程3。Join()線程4。Join()線程5。Join()前面的代碼:thread1。Start()//線程1啟動(dòng)線程1。Join()//等待線程1退出。在線程1退出之前,以下代碼無法執(zhí)行線程2。start()//上面描述了下面的代碼。thread2.Join()thread3.Start()thread3.Join()thread4.Start()thread4.Join()