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