1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace asyncApp
  13. {
  14. public partial class FrmAsync : Form
  15. {
  16. public FrmAsync()
  17. {
  18. InitializeComponent();
  19. }
  20. public int ExecuteTask1(int num)
  21. {
  22. Thread.Sleep(5000);
  23. return num * num;
  24. }
  25. public int ExecuteTask2(int num)
  26. {
  27. return num * num;
  28. }
  29. private void btnExectue1_Click(object sender, EventArgs e)
  30. {
  31. this.lblCount1.Text = ExecuteTask1(10).ToString();
  32. this.lblCount2.Text = ExecuteTask2(10).ToString();
  33. }
  34.  
  35. private void btnExecute2_Click(object sender, EventArgs e)
  36. {
  37. MyDelegate dete = ExecuteTask1;
  38. //异步操作执行状态借口
  39. IAsyncResult result = dete.BeginInvoke(10,null,null);
  40. this.lblCount1.Text = "正在计算......";
  41. this.lblCount2.Text = ExecuteTask2(10).ToString();
  42. //EndInvoke方法借助IAsyncResult借口对象,不断地查询异步调用是否结束;
  43. //该方法知道异步调用的方法所有参数,所以异步调用完毕以后,取出异步调用结果作为返回值
  44. int res = dete.EndInvoke(result);
  45. this.lblCount1.Text = res.ToString();
  46. }
  47. public delegate int MyDelegate(int num);
  48. }
  49. }

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace asyncAppCallback
  13. {
  14. public partial class FrmAppCallback : Form
  15. {
  16. public FrmAppCallback()
  17. {
  18. InitializeComponent();
  19. this.objCal = new MyDelegate(ExecuteTask);//初始化成员变量
  20. //this.objCal = (num, ms)=>
  21. //{
  22. // Thread.Sleep(ms);
  23. // return num * num;
  24. //};
  25.  
  26. }
  27. //【1】声明一个委托
  28. public delegate int MyDelegate(int num, int ms);
  29. //【2】根据委托声明一个方法
  30. private int ExecuteTask(int num, int ms)
  31. {
  32. Thread.Sleep(ms);
  33. return num * num;
  34. }
  35. //【3】创建委托变量
  36. MyDelegate objCal = null;//ExecuteTask;
  37. //【4】同步执行多个任务
  38. private void btnExecu_Click(object sender, EventArgs e)
  39. {
  40. for (int i = 1; i <= 10; i++)
  41. {
  42. objCal.BeginInvoke(10 * i, 1000 * i, MyCallback,i);
  43. }
  44. }
  45. //【5】创建回调函数
  46. private void MyCallback(IAsyncResult result)
  47. {
  48. int res= objCal.EndInvoke(result);
  49. //异步显示结果
  50. Console.WriteLine("第{0}个计算结果:{1}",result.AsyncState,res);
  51. }
  52. }
  53. }

  

IAsyncResult的更多相关文章

  1. 基于ASP.NET的comet简单实现 http长连接,IAsyncResult

    http://www.cnblogs.com/hanxianlong/archive/2010/04/27/1722018.html 我潜水很多年,今天忽然出现.很久没写过博客了,不是因为不想写,而是 ...

  2. IAsyncResult 接口异步 和匿名委托

    IAsyncResult 接口异步 DataSet ds = new DataSet(); Mydelegate del = new Mydelegate(LoadData); IAsyncResul ...

  3. C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!

    说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...

  4. 异步核心接口IAsyncResult的实现

    要实现异步编程,就需要正确的实现IAsyncResult接口.IAsyncResult共有四个属性: public interface IAsyncResult { object AsyncState ...

  5. IAsyncResult 接口

    IAsyncResult 接口由包含可异步操作的方法的类实现.它是启动异步操作的方法的返回类型,如 FileStream.BeginRead,也是结束异步操作的方法的第三个参数的类型,如 FileSt ...

  6. IAsyncResult接口

    #region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...

  7. C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿![转载]

    说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...

  8. C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式

    三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来 ...

  9. .net IAsyncResult 异步操作

    //定义一个委托 public delegate int DoSomething(int count); //BeginInvoke 的回调函数 private static void Execute ...

  10. C#异步编程模式IAsyncResult

    IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 B ...

随机推荐

  1. 思维+双指针+环——cf1244F

    /* 可以发现一个性质:连续两个相同色块永远不会变色 继而可以发现,这个色段每次迭代都向左向右拓展长度1,直到撞上其他扩张的色段 所以预处理出所有连续色段,然后对于所有不在色段里的点,我们可以预测其最 ...

  2. 基础课(一)Cisco Packet Tracer Student模拟器简单的运用

    一.相同设备之间用交叉线,不同设备之间用直通线 如上图中的简单的两个PC机相连,交叉线相连的两个PC机是能ping同,直通线相连的两台PC机不通,ipconfig可以查看本机设备的网络配置 time= ...

  3. kubernetes(k8s)集群安全机制RBAC

    1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...

  4. Alibaba Cloud Toolkit,你确定不来尝鲜一下?

    阿里云出了新的工具,Alibaba Cloud Toolkit,看看“toolkit”这个名字就知道它是一个工具集. 没错!它就是一个工具集,一个集打包部署发布以及探索分析程序的工具集.而我,目前还停 ...

  5. delphi 内存映射

    使用内存映射文件读写大文件 使用内存映射文件读写大文件 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类.一般来说,这些函数可以满足大多数场合的要求,但是 ...

  6. 17、通过maven生成测试报告

    目录如下: 通过Maven 生成报告 进入testngTest根目录,运行mvn test 命令 进入 testngTest\target\surefire-reports 路径查看测试报告

  7. Intel Pin基础

    参考:http://software.intel.com/sites/landingpage/pintool/docs/62732/Pin/html/ http://blog.nruns.com/bl ...

  8. vue项目使用js-xlsx进行excel表格的导入和导出方法的简单原型封装

    前提:已经安装好 file-saver xlsx和 script-loader,如未安装,请查看 https://www.cnblogs.com/luyuefeng/p/8031597.html 新建 ...

  9. 用python+tushare获取股票前复权后复权行情数据

    接口名称 :pro_bar 接口说明 :复权行情通过通用行情接口实现,利用Tushare Pro提供的复权因子进行计算,目前暂时只在SDK中提供支持,http方式无法调取. Python SDK版本要 ...

  10. html5本地存储(三)--- 本地数据库 indexedDB

    html5内置了2种本地数据库,一是被称为“SQLLite”,可以通过SQL语言来访问文件型SQL数据库.二是被称为“indexedDB” 的NoSQL类型的数据库,本篇主要讲indexedDB数据库 ...