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


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM