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);


}


}


}