c# 异步调用 利用委托异步调用

  • A+
所属分类:.NET技术
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);
}
}
}