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

首頁 > 學院 > 開發設計 > 正文

C#委托學習之回調

2019-11-08 02:00:31
字體:
來源:轉載
供稿:網友

    委托:

    在c#中定義為:委托就像一個函數的指針,在程序運行時可以使用它們來調用不同的函數。

    我的理解就是一個方法,但是需要傳入的參數類型與普通參數不同,需要傳入另一個方法作為參數。

  委托的使用:

    首先定義一個委托類:public delegate int MethodDel();

    然后實例化一個委托:public MethodDel addMethod = new MethodDel(Add);,其中Add();方法的返回值與參數必須與定義的委托類的返回值和參數相同。

    使用時可以添加委托鏈:addMethod += Add2;同理也可以進行減等操作。

委托的調用:

    委托的調用分為同步調用、異步調用和異步回調。

    同步調用:即使用Invoke();方法。同步調用又稱阻塞調用,會阻塞當前線程。

    異步調用:一步調用不會阻塞線程,而是把線程放到線程池中,程序會繼續執行。通過BeginInvoke();EndInvoke();來實現。

但是如果運行到EndInvoke();時,調用沒有執行完畢,依然會阻塞線程。

    異步回調:當調用結束時會自動調用回到函數,解決了為等待調用結果,而讓線程依舊被阻塞的局面。

測試代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.Collections;using System.Runtime.Remoting.Messaging;namespace StudyTest{    class PRogram    {        public delegate int MethodDel();        public static MethodDel addMethod = new MethodDel(Add);        static void Main(string[] args)        {            Console.ReadKey();            addMethod.Invoke();            Console.WriteLine("同步調用完成");            Console.ReadKey();            IAsyncResult resule = addMethod.BeginInvoke(null, null);            Console.WriteLine("做別的事情");            Console.ReadKey();//代表做別的事情,再次停頓5秒以上            addMethod.EndInvoke(resule);            Console.WriteLine("異步調用完成");            Console.ReadKey();            IAsyncResult resulet = addMethod.BeginInvoke(new AsyncCallback(回調函數), "AsycState:OK");            Console.WriteLine("做別的事情");            Console.ReadKey();        }        public static int Add()        {            Thread.Sleep(5000);//代表正在調用,停止5秒            return 3;        }        public static void 回調函數(IAsyncResult result)        {            addMethod= (MethodDel)((AsyncResult)result).AsyncDelegate;            Console.WriteLine(addMethod.EndInvoke(result));            Console.WriteLine(result.AsyncState);        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威海市| 宜州市| 衡东县| 克拉玛依市| 正镶白旗| 驻马店市| 汶川县| 南涧| 墨脱县| 平潭县| 吉安市| 巍山| 成武县| 六枝特区| 苏尼特右旗| 牡丹江市| 鹤山市| 斗六市| 新乡市| 凭祥市| 新巴尔虎右旗| 新巴尔虎左旗| 芷江| 曲沃县| 永年县| 黔西县| 许昌市| 疏附县| 朝阳县| 马山县| 沿河| 深水埗区| 扎赉特旗| 阆中市| 会宁县| 昌宁县| 通河县| 临清市| 富锦市| 天台县| 长治县|