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