1:調異步呼叫無回呼函式 using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Threading; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { new AsynchronousTest().Test(); } } public class AsynchronousTest { /// /// 第一步:創建委托 /// /// /// /// public delegate int deletest(int a, int b); /// /// 第二步:創建方法 /// /// /// /// public int Add(int a, int b) { Thread.Sleep(500); return a + b; } /// /// 第三步:呼叫 /// public void Test() { var d = new deletest(Add); IAsyncResult res = d.BeginInvoke(1, 2, null, null); } } } 2:異步呼叫有回呼函式 using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Threading; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { new AsynchronousTest().Test(); } } public class AsynchronousTest { /// /// 第一步:創建委托 /// /// /// /// public delegate int deletest(int a, int b); /// /// 第二步:創建方法 /// /// /// /// public int Add(int a, int b) { Thread.Sleep(500); return a + b; } /// /// 回呼函式 /// 說明:只能是無回傳值 /// 引數只能是IAsyncResult /// public void CallbackF(IAsyncResult result) { //AsyncDelegate 屬性可以強制轉換為用戶定義的委托的實際類, deletest test = (deletest)((System.Runtime.Remoting.Messaging.AsyncResult)result).AsyncDelegate; var d = test.EndInvoke(result); //被呼叫方法回傳值 Add()的回傳值 //需要處理的事情 //................ } /// /// 第三步:呼叫 /// public void Test() { var d = new deletest(Add); //new AsyncCallback(CallbackF) 回呼函式 IAsyncResult res = d.BeginInvoke(1, 2, new AsyncCallback(CallbackF), null); } } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/295811.html
標籤:.NET技术
