国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#使用委托的形式調(diào)用線(xiàn)程代碼實(shí)例

2019-10-29 19:58:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

委托

對(duì)于委托,我們都知道他是一個(gè)引用類(lèi)型,具有引用類(lèi)型所具有的通性。需要知道的是它保存的不是實(shí)際值,只是是保存對(duì)存儲(chǔ)在托管堆中的對(duì)象的引用。或說(shuō)的直接點(diǎn),委托就相當(dāng)于叫人幫忙,讓你幫你做一些事情。我這里就使用委托的形式,調(diào)用線(xiàn)程,來(lái)簡(jiǎn)單的說(shuō)一下。

代碼如下:

using System;using System.Threading;namespace _012_線(xiàn)程{  class Program  {    static void Main(string[] args) //在mian中線(xiàn)程是執(zhí)行一個(gè)線(xiàn)程里面的語(yǔ)句的執(zhí)行,是從上到下的    {      //通過(guò)委托 開(kāi)啟一個(gè)線(xiàn)程      //==============可用泛型傳參數(shù)(無(wú)返回值)==============      Action threaA = ThreadTestA;      threaA.BeginInvoke(null,null); //開(kāi)啟一個(gè)新的線(xiàn)程去執(zhí)行,threaA所引用的方法      Action<int> threaB = ThreadTestB;      threaB.BeginInvoke(111,null, null);      //可以認(rèn)為線(xiàn)程是同時(shí)執(zhí)行的 (異步執(zhí)行)      Console.WriteLine("異步執(zhí)行");      //================帶返回值的形式====================      //第一種方式 檢測(cè)線(xiàn)程結(jié)束  ----- IsCompleted線(xiàn)程是否行完畢      //Func<int, int> threaC = ThreadTestC;      ////接收異步線(xiàn)程返回值      //IAsyncResult returnResult = threaC.BeginInvoke(111, null, null);      //while (!res.IsCompleted)      //{      //  Console.Write(".");      //  Thread.Sleep(10); //控制子線(xiàn)程的檢測(cè)頻率,(每10ms檢測(cè)一次)      //}      ////取得異步線(xiàn)程返回值      //int result = threaC.EndInvoke(res);      //Console.WriteLine("IsCompleted方式檢測(cè):" + result);      //第二種方式 檢測(cè)線(xiàn)程結(jié)束  -----  1000ms沒(méi)結(jié)束就返回false,反之      Func<int, int> threaC = ThreadTestC;      //接收異步線(xiàn)程返回值      IAsyncResult returnResult = threaC.BeginInvoke(111, null, null);      bool isEnd = returnResult.AsyncWaitHandle.WaitOne(1000);      int result = 0;      if (isEnd)      {        result = threaC.EndInvoke(returnResult);      }      Console.WriteLine("EndInvoke()方式檢測(cè):" + isEnd +" "+ result);      //第三種方式  檢測(cè)線(xiàn)程結(jié)束  ----- 通過(guò)回調(diào),檢測(cè)線(xiàn)程結(jié)束      Func<int,string, string> threaD = ThreadTestD;      //倒數(shù)第二個(gè)參數(shù),表示委托類(lèi)型的參數(shù),(回調(diào)函數(shù))當(dāng)線(xiàn)程結(jié)束的時(shí)候會(huì)調(diào)用這個(gè)委托指向的方法      //最后一個(gè)參數(shù),用來(lái)給回調(diào)函數(shù)傳遞數(shù)據(jù)      IAsyncResult asy = threaD.BeginInvoke(111,"Czhenya", OnCallKey, threaD);      //改為L(zhǎng)amdba表達(dá)式      threaD.BeginInvoke(111, "Czhenya",(ar)=>{        string res = threaD.EndInvoke(ar);        Console.WriteLine("在Lamdba表達(dá)式中取得:"+res);      },null);      Console.ReadKey();    }    static void OnCallKey(IAsyncResult ar)    {      Func<int, string, string> thread = ar.AsyncState as Func<int, string, string>;      string res = thread.EndInvoke(ar);      Console.WriteLine("在回調(diào)函數(shù)中取到的結(jié)果 :"+res);    }    /// <summary>    /// 一般是比較耗時(shí)的操作方法    /// </summary>    static void ThreadTestA()    {      Console.WriteLine("ThreaTestA");    }    static void ThreadTestB(int num)    {      Console.WriteLine("ThreaTestB "+num);    }    static int ThreadTestC(int num)    {      Console.WriteLine("ThreaTestC");      Thread.Sleep(100); //讓當(dāng)前線(xiàn)程休眠(暫停線(xiàn)程(參數(shù)單位:ms))      return num;    }    static string ThreadTestD(int num,string str)    {      Console.WriteLine("ThreaTestD");      return num +" "+ str;    }  }}

運(yùn)行結(jié)果圖:

C#,委托,線(xiàn)程,代碼

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到c#教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沾益县| 鲁山县| 南皮县| 黄大仙区| 射洪县| 特克斯县| 阳朔县| 大田县| 武冈市| 峨边| 聂拉木县| 长顺县| 绵竹市| 沁阳市| 城固县| 东辽县| 韩城市| 德兴市| 芮城县| 凌云县| 楚雄市| 尖扎县| 泽普县| 平塘县| 上杭县| 南昌市| 长丰县| 乌拉特前旗| 凌源市| 尚义县| 昌黎县| 霍城县| 庄浪县| 瑞昌市| 新丰县| 秦安县| 剑川县| 汶上县| 盐山县| 惠来县| 灯塔市|