刚刚搞明白了C#的异步调用,写下来,方便后续调用。

异步主要是解决UI假死的问题,而开辟出一个新的线程,处理大数据。

1.既然是委托的调用,那么先定义个委托:

public delegate bool CheckUpdateFile();

2.定义一个将要工作的委托函数,和委托类型一致

private bool Press(){//处理大数据//如读取大文件,网络通讯等return true;}

3.声明及初始化委托实例,运行该实例

BeginInvoke( AsyncCallback callback,object @object) //原型

需要一个带有IAsyncResult 参数类型的函数,如:private void callback(IAsyncResult ar)

CheckUpdateFile fun = new CheckUpdateFile(Press);
fun.BeginInvoke(callback, fun);

//回调函数
private void callback(IAsyncResult ar)//该参数功能强大,万能型,可以传object  { if (!ar.IsCompleted) return;//没有完成,不结束改线程。 var fun = (CheckUpdateFile)ar.AsyncState;//强类型转换为委托对象       //var sar = (AsyncResult)ar;        //var fun= (MyDelegate)sar.AsyncDelegate;  var isok = fun.EndInvoke(ar);//结束后返回委托Press的结果 if (isok) { Invoke((EventHandler)delegate { //匿名方法体,委托完成后,将要做什么。  }); } } 

二、还可以使用匿名函数来写

var fun = new CheckUpdateFile(Press);
fun.BeginInvoke(ar =>
{if (!ar.IsCompleted) return;//var fun = (CheckUpdateFile)ar.AsyncState;声明在前部分,不需要转换。var isok = fun.EndInvoke(ar);//结束后返回委托Press的结果if (isok){Invoke((EventHandler)delegate{});}
}, fun);//fun可写为null,匿名函数中不需要转换

转载于:https://www.cnblogs.com/ankeyliu/p/4552367.html

委托的BeginInvoke和EndInvoke相关推荐

  1. 异步使用委托delegate --- BeginInvoke和EndInvoke方法

    当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...

  2. C#线程系列讲座(1):BeginInvoke和EndInvoke方法

    本文是转载,原文地址:http://www.itpub.net/thread-1021075-1-1.html 几个关键词:IAsyncResult,isComplete,asyncResult.As ...

  3. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)

      http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564052.html http://www.cnblogs.com/worldreaso ...

  4. BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题

    BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 参考文章: (1)BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 (2)https://www. ...

  5. C#当中的BeginInvoke和EndInvoke

    我们已经知道 C#当中 存在async/await .BackGroudWorker类以及TPL(任务并行库).当然C#还有一些旧的模式来支持异步编程.参考<C#图解教程>  1. Beg ...

  6. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)2

    七.其他组件的BeginXXX和EndXXX方法 在其他的.net组件中也有类似BeginInvoke和EndInvoke的方法,如System.Net.HttpWebRequest类的BeginGe ...

  7. 异步编程中的BeginInvoke和EndInvoke

    如果委托对象的调用列表中只有一个方法(引用方法),就可以异步执行这个方法,通过调用委托类特有的两个方法BeginInvoke和EndInvoke去执行. BeginInvoke和EndInvoke 的 ...

  8. Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...

    收藏地址  http://aierong.cnblogs.com/archive/2005/05/25/162308.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要等待同步 ...

  9. C# BeginInvoke与EndInvoke的使用

    之前,我已经说过了BeginInvoke与Invoke的异同 这里就要再来说说endinvoke的意思了 我们知道 beginvoke就是通过线程的调用来异步的完成一些工作.一般只需要启动它就好,让它 ...

最新文章

  1. linux达人养成计划学习笔记(四)—— 压缩命令
  2. 使用Powerdesigner的逆向工程生成PDM(主要是注释可以放进去)
  3. 网站运维技术与实践之服务器监测常用命令
  4. php 实现的n,php 实现数据N等分。
  5. C++ 内存的分配方式
  6. linux中忘记mysql用户root密码解决方案
  7. xposed框架_免ROOT 用“太极”替代Xposed框架
  8. 谈canvas转图片的方法(base64编码)
  9. vs2017 开关“/NOENTRY”只与 DLL 兼容;链接时不使用“/NOENTRY”
  10. 截图及录屏工具ShareX
  11. VMware 中搭建 SylixOS 环境
  12. 蓝牙键盘 android手机游戏,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘...
  13. 卸载软件-Uninstall Tool(无残留)
  14. 【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位
  15. 带特殊符号|的字符串的截取
  16. PostgreSQL死锁了怎么办?
  17. odroidxu4linux,2019年值得期待的5个树莓派替代品
  18. UML的九种图+包图
  19. RTFSC - Read The Fucking Source Code
  20. JAVA微信小程序浴室预约系统毕业设计 开题报告

热门文章

  1. 欢迎使用CSDN-markdown编辑器11111
  2. 《2012》:让灾难成为一场洗礼
  3. 使用握手信号实现跨时钟域数据传输
  4. 一旦有辞职念头就干不长了吗_每天都有辞职不想上班的冲动,你有吗?
  5. 360浏览器卸载_陈蛋蛋碎碎念—如何完美地卸载流氓软件
  6. mysql终端_MySQL之终端(Terminal)管理MySQL
  7. python计算面积折线图_Python交互图表可视化Bokeh:4. 折线图| 面积图
  8. html css animation,css animation是什么?
  9. Day 21 20190205 老男孩python学习第21天 内容整理
  10. zabbix 从入门到精通