zoukankan      html  css  js  c++  java
  • 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);
    }
    }
    }
     
     
     
  • 相关阅读:
    C#图形编程
    深入浅出话事件(上)
    .NET名称空间对应的类集
    Equals() 和运算符 == 的重写准则(C# 编程指南)
    Implement EventArgs
    CLS(公共语言规范)的CLSCompliant(跨语言调用)
    学习MSCOREE.dll是托管程序的入口点
    设计模式之原型模式代码示例
    The disk cannot be added to Cluster Shared Volumes because it does not have any suitable partitions
    RAID小结
  • 原文地址:https://www.cnblogs.com/kcjm/p/15207270.html
Copyright © 2011-2022 走看看