View Code

//异步委托
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;namespace AsyncDelete
{class Program{public delegate int TaskesAWhileDelegate(int data, int ms);static void Main(string[] args){TaskesAWhileDelegate dl = TaskesAWhile;IAsyncResult ar = dl.BeginInvoke(1, 3000, null, null);Console.WriteLine("main主线程");while (!ar.IsCompleted){Console.Write(".");Thread.Sleep(50);}int result = dl.EndInvoke(ar);Console.WriteLine("result:{0}", result);Console.Read();}static int TaskesAWhile(int data, int ms){Console.WriteLine("TaskesAWhile started");Thread.Sleep(ms);Console.WriteLine("TaskesAWhile completed");return ++data;}}
}

或:

View Code

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6
 7 namespace AsyncDelete
 8 {
 9     class Program
10     {
11         public delegate int TaskesAWhileDelegate(int data, int ms);
12         static void Main(string[] args)
13         {
14             TaskesAWhileDelegate dl = TaskesAWhile;
15
16             IAsyncResult ar = dl.BeginInvoke(1, 300, new AsyncCallback(MyAsyncCallback), dl);
17             Console.WriteLine("main主线程");
18             while (!ar.IsCompleted)
19             {
20                 Console.Write(".");
21                 Thread.Sleep(50);
22             }
23
24         }
25         static int TaskesAWhile(int data, int ms)
26         {
27             Console.WriteLine("TaskesAWhile started");
28             Thread.Sleep(ms);
29             Console.WriteLine("TaskesAWhile completed");
30             return ++data;
31         }
32
33         static void MyAsyncCallback(IAsyncResult asyncResult)
34         {
35             Console.WriteLine("MyAsyncCallback start");
36             Thread.Sleep(30);
37             TaskesAWhileDelegate dll = asyncResult.AsyncState as TaskesAWhileDelegate;
38             Console.WriteLine("MyAsyncCallback:{0}", dll.EndInvoke(asyncResult));
39
40
41             Console.WriteLine("MyAsyncCallback completed");
42         }
43     }
44 }

//BegininInvoke()方法,返回类型:IAsyncResult

通过IAsyncResult获取委托执行的状态(IsCompleted)和调用委托EndInvoke()返回执行结果,

EndInvoke()方法会一直等待,直到委托完成其任务为止.

执行结果:

main主线程
TaskesAWhile started
.............................................................TaskesAWhile completed
result:2

转载于:https://www.cnblogs.com/xmyy/articles/2812218.html

C# 最简单的异步委托相关推荐

  1. .NET简谈组件程序设计之(异步委托)

    说到委托我想大家基本上都用过的,今天这篇文章就来讲解关于委托的异步奥秘. 在我们正常使用的时候很少会去用异步委托技术来提高代码效率.委托的好处就是能对方法进行面向对象的封装,随意传递.在任何组件客户代 ...

  2. [转载]C#异步委托的用法 .

    每个委托都有三个方法:Invoke.BeginInvoke.EndInvoke.第一个方法是委托指定函数的同步调用,另外两个是异步调用. BeginInvoke方法,调用后立即返回,不等待调用结果.E ...

  3. C# 异步委托 BeginInvoke EndInvoke

    1. 简单主线程中委托: static void Main(string[] args) {//定义一个委托,并初始化Func<int, int, string> delFunc = (a ...

  4. 异步委托实现多线程winform控件编程

            private void button1_Click(object sender, EventArgs e)         {             ThreadStart ts  ...

  5. 在.NET2.0中如何更简单的使用委托将方法加载到事件中去

    我们知道在System命名空间中,.NET为我们提供了EventHandler的委托,它的原型是delegate void EventHandler(object sender,EventArgs e ...

  6. 多线程,异步委托,同步委托几种方式的区别

    Code         public delegate void DoThingsDelegate();         private void Window_Loaded(object send ...

  7. C#里实现简单的异步TCP服务器

    C#里实现简单的异步TCP服务器 在前面实现阻塞式的TCP服务器,比较容易理解,解决简单的问题够用了. 但是如果面对多个连接,多个客户端的处理,就不行了. 这时候就要采用异步的TCP服务器,或者多任务 ...

  8. C#异步编程的实现方式(1)——异步委托

    异步的实现即多线程,一种简单的方式就是创建一个委托,然后异步调用它. .Net Framework已经为我们提供了委托的异步调用方法.下面介绍三种使用委托实现异步的方法. 1.投票(IsComplet ...

  9. [转]C#异步编程的实现方式(1)——异步委托

    异步的实现即多线程,一种简单的方式就是创建一个委托,然后异步调用它. .Net Framework已经为我们提供了委托的异步调用方法.下面介绍三种使用委托实现异步的方法. 1.投票(IsComplet ...

  10. 界面-工作者线程结构之:异步委托调用

    1.流程: 1.1 定义一个委托,形如:public delegate object WorkThread(object controlsAndParameters);由于object可以容纳任何.N ...

最新文章

  1. 《将要淘汰的八种人》读后感
  2. 面试官:Redis用过是吧?那你讲讲Redis都有哪些监控指标?
  3. TRzCheckTree的使用
  4. [COCI 2018#5]Parametriziran
  5. 简单利用HTTP中的PUT协议拿下SHELL
  6. spring mvc学习(6):springMVC的常见注解
  7. 计算机设备故障类型有哪些,计算机硬件故障有哪些
  8. @ta,一起过节吧!
  9. pytorch使用Ray-tune对原有训练模型的代码改写,自动调参(一)
  10. 【python-dict】dict的使用及实现原理
  11. vscode如何关闭Pylint警告或错误提示
  12. 程序猿的爱情--2011-12-27
  13. Python类的私有属性
  14. oracle混音插件教程,Waves插件个人经验谈
  15. 电脑小手图标怎么去除_图文教你去除桌面图标箭头_消除电脑图标小箭头的方法-系统城...
  16. alitum designer 快速制作元器件封装
  17. 计算机考研机试如何准备?
  18. DocuFreezer(批量文件格式转换器)官方正式版V3.1.2012.18200 | 文件格式转换器哪个好用
  19. wingdings字体符号在哪_Wingdings特殊字符及符号对照表
  20. 嵌入式linux与windows之间的tftp文件传输(保姆级)

热门文章

  1. NetCDF文件介绍
  2. 重写Java中equals和hashcode方法的一般规则
  3. ImageLoader的简单分析(终结篇)
  4. android 对象输出到文件
  5. 快应用开发教程【02】--项目配置教程
  6. 基于pyspark 大数据分析_基于阿里云平台的大数据教学案例 —— B站弹幕数据分析...
  7. ai如何置入_AI中如何导入图形图像?
  8. 奇门对接需求设计_奇门格局详解_-_么学声_张志春
  9. android html片段,详解Android WebView加载html片段
  10. java案例代码10--购物车案例--重要