委托實現(xiàn)C#異步調(diào)用淺析
委托實現(xiàn)C#異步調(diào)用是怎么實現(xiàn)的呢?委托實現(xiàn)C#異步調(diào)用是使用BeginInvoke及回調(diào)函數(shù)的使用:
委托實現(xiàn)C#異步調(diào)用的步驟:
1.定義委托。
2.將要進(jìn)行異步調(diào)用的方法“實例化”到定義的委托。
3.在委托上調(diào)用BeginInvoke方法。其中,BeginInvoke的參數(shù)由三個部分構(gòu)成。***部分:所定義的委托的函數(shù)簽名。
第二部分:希望調(diào)用的回調(diào)函數(shù)的委托。第三部分:自定義委托的實例(該實例將會在回調(diào)函數(shù)中的IAsyncResult的AsyncRState屬性中重構(gòu)出我們在步驟2中定義的委托實例,并借助這個實例來調(diào)用EndInvoke方法。)
4.如果我們希望在當(dāng)前線程來處理異步調(diào)用的結(jié)果,則可以使用BeginInvoke方法返回一個IAsyncResult實例(例如ar)
并在當(dāng)前線程等待。如果我們希望在異步線程中通過回調(diào)函數(shù)來處理結(jié)果,則我們需要在3中傳遞一個回調(diào)委托,并在該處理中調(diào)用EndInvoke方法。
委托實現(xiàn)C#異步調(diào)用的一段實例:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- namespace property
- {
- public class DelegateClass
- {
- public delegate int AsyncSampDelegate();
- public event AsyncSampDelegate delEvent;
- public void Run()
- {
- Console.WriteLine("The Run Thread is {0}",
- Thread.CurrentThread.GetHashCode());
- foreach (AsyncSampDelegate del in
- delEvent.GetInvocationList())
- {
- del.BeginInvoke(new AsyncCallback(ReturnAsync), del);
- }
- }
- public void ReturnAsync(IAsyncResult ar)
- {
- //獲得調(diào)用委托實例的引用
- AsyncSampDelegate del = (AsyncSampDelegate)ar.AsyncState;
- int result = del.EndInvoke(ar);
- Console.WriteLine("The result is {0},
- The Thread is {1}", result, Thread.CurrentThread.GetHashCode());
- }
- }
- public class FirstSubscribe
- {
- private int myCount = 0;
- public void AddFunToDel(DelegateClass tmpDel)
- {
- tmpDel.delEvent+=new DelegateClass.
- AsyncSampDelegate(FirstFun);
- }
- public int FirstFun()
- {
- return myCount++;
- }
- }
- public class SecondSubscribe
- {
- private int myCount = 0;
- public void AddFunToDel(DelegateClass tmpDel)
- {
- tmpDel.delEvent+=new DelegateClass.
- AsyncSampDelegate(SecondFun);
- }
- public int SecondFun()
- {
- return myCount += 2;
- }
- }
- public class App
- {
- static void Main()
- {
- DelegateClass delClass = new DelegateClass();
- FirstSubscribe fs = new FirstSubscribe();
- SecondSubscribe ss = new SecondSubscribe();
- fs.AddFunToDel(delClass);
- ss.AddFunToDel(delClass);
- Console.WriteLine("The Main Thread is {0}",
- Thread.CurrentThread.GetHashCode());
- delClass.Run();
- Console.Read();
- }
- }
- }
委托實現(xiàn)C#異步調(diào)用的基本情況就向你介紹到這里,希望對你了解和學(xué)習(xí)委托實現(xiàn)C#異步調(diào)用有所幫助。
【編輯推薦】