C#子線(xiàn)程執(zhí)行完后通知主線(xiàn)程的方法
其實(shí)這個(gè)比較簡(jiǎn)單,子線(xiàn)程怎么通知主線(xiàn)程,就是讓子線(xiàn)程做完了自己的事兒就去干主線(xiàn)程的轉(zhuǎn)回去干主線(xiàn)程的事兒。
那么怎么讓子線(xiàn)程去做主線(xiàn)程的事兒呢,我們只需要把主線(xiàn)程的方法傳遞給子線(xiàn)程就行了,那么傳遞方法就很簡(jiǎn)單了委托傳值嘛;
下面有一個(gè)例子,子線(xiàn)程干一件事情,做完了通知主線(xiàn)程
public class Program
{
//定義一個(gè)為委托
public delegate void Entrust(string str);
static void Main(string[] args)
{
Entrust callback = new Entrust(CallBack); //把方法賦值給委托
Thread th = new Thread(Fun);
th.IsBackground = true;
th.Start(callback);//將委托傳遞到子線(xiàn)程中
Console.ReadKey();
}
private static void Fun(object obj) {
//注意:線(xiàn)程的參數(shù)是object類(lèi)型
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("子線(xiàn)程循環(huán)操作第 {0} 次",i);
Thread.Sleep(500);
}
Entrust callback = obj as Entrust;//強(qiáng)轉(zhuǎn)為委托
callback("我是子線(xiàn)程,我執(zhí)行完畢了,通知主線(xiàn)程");
//子線(xiàn)程的循環(huán)執(zhí)行完了就執(zhí)行主線(xiàn)程的方法
}
//主線(xiàn)程的方法
private static void CallBack(string str) {
Console.WriteLine(str);
}
}
上面就是一個(gè)通過(guò)委托進(jìn)行向主線(xiàn)程傳值(也就是通知主線(xiàn)程)的過(guò)程,上面我們是自己定義了一個(gè)委托,當(dāng)然我們也可以使用.NET為我們提供的Action<>和Fun<>泛型委托來(lái)處理,就像這樣
public class Program
{
//定義一個(gè)為委托
public delegate void Entrust(string str);
static void Main(string[] args)
{
Action<string> callback = ((string str) => { Console.WriteLine(str); });
//Lamuda表達(dá)式
Thread th = new Thread(Fun);
th.IsBackground = true;
th.Start(callback);
Console.ReadKey();
}
private static void Fun(object obj) {
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("子線(xiàn)程循環(huán)操作第 {0} 次",i);
Thread.Sleep(500);
}
Action<string> callback = obj as Action<string>;
callback("我是子線(xiàn)程,我執(zhí)行完畢了,通知主線(xiàn)程");
}
}
//上面的Lamuda表達(dá)式也可以回城匿名函數(shù)
//Action<string> callback = delegate(string str) { Console.WriteLine(str); };
下面是運(yùn)行結(jié)果

以上這篇C#子線(xiàn)程執(zhí)行完后通知主線(xiàn)程的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python 多線(xiàn)程中子線(xiàn)程和主線(xiàn)程相互通信方法
- python主線(xiàn)程捕獲子線(xiàn)程的方法
- Java父線(xiàn)程(或是主線(xiàn)程)等待所有子線(xiàn)程退出的實(shí)例
- Android主線(xiàn)程和子線(xiàn)程區(qū)別詳解
- android主線(xiàn)程和子線(xiàn)程之間消息傳遞詳解
- Java多線(xiàn)程--讓主線(xiàn)程等待所有子線(xiàn)程執(zhí)行完畢在執(zhí)行
- android中UI主線(xiàn)程與子線(xiàn)程深入分析
- C#利用子線(xiàn)程刷新主線(xiàn)程分享教程
- python主線(xiàn)程與子線(xiàn)程的結(jié)束順序?qū)嵗馕?/a>
相關(guān)文章
C#如何打開(kāi)選擇文件對(duì)話(huà)框和選擇目錄對(duì)話(huà)框
這篇文章主要介紹了C#如何打開(kāi)選擇文件對(duì)話(huà)框和選擇目錄對(duì)話(huà)框問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
C#中動(dòng)態(tài)顯示當(dāng)前系統(tǒng)時(shí)間的實(shí)例方法
想在網(wǎng)頁(yè)中動(dòng)態(tài)地顯示當(dāng)前系統(tǒng)的時(shí)間,找了好多,不過(guò)都是一些停在那里不動(dòng)的。。。不過(guò)皇天不負(fù)有心人,終于讓我找到了2013-05-05
C# 設(shè)計(jì)模式系列教程-簡(jiǎn)單工廠(chǎng)模式
簡(jiǎn)單工廠(chǎng)模式職責(zé)單一,實(shí)現(xiàn)簡(jiǎn)單,且實(shí)現(xiàn)了客戶(hù)端代碼與具體實(shí)現(xiàn)的解耦。2016-06-06
Unity實(shí)戰(zhàn)之FlyPin(見(jiàn)縫插針)小游戲的實(shí)現(xiàn)
這篇文章主要介紹了利用Unity制作FlyPin(見(jiàn)縫插針)小游戲的實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起試一試2022-01-01
C#多線(xiàn)程之線(xiàn)程池ThreadPool詳解
本文詳細(xì)講解了C#多線(xiàn)程之線(xiàn)程池ThreadPool,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#使用WebService結(jié)合jQuery實(shí)現(xiàn)無(wú)刷新翻頁(yè)的方法
這篇文章主要介紹了C#使用WebService結(jié)合jQuery實(shí)現(xiàn)無(wú)刷新翻頁(yè)的方法,涉及C#中WebService與jQuery操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
C#導(dǎo)出網(wǎng)站功能實(shí)例代碼講解
這篇文章主要介紹了C#導(dǎo)出網(wǎng)站功能實(shí)例代碼,需要的朋友可以參考下2015-10-10

