委托的BeginInvoke和EndInvoke
刚刚搞明白了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相关推荐
- 异步使用委托delegate --- BeginInvoke和EndInvoke方法
当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...
- C#线程系列讲座(1):BeginInvoke和EndInvoke方法
本文是转载,原文地址:http://www.itpub.net/thread-1021075-1-1.html 几个关键词:IAsyncResult,isComplete,asyncResult.As ...
- Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564052.html http://www.cnblogs.com/worldreaso ...
- BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 参考文章: (1)BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 (2)https://www. ...
- C#当中的BeginInvoke和EndInvoke
我们已经知道 C#当中 存在async/await .BackGroudWorker类以及TPL(任务并行库).当然C#还有一些旧的模式来支持异步编程.参考<C#图解教程> 1. Beg ...
- Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)2
七.其他组件的BeginXXX和EndXXX方法 在其他的.net组件中也有类似BeginInvoke和EndInvoke的方法,如System.Net.HttpWebRequest类的BeginGe ...
- 异步编程中的BeginInvoke和EndInvoke
如果委托对象的调用列表中只有一个方法(引用方法),就可以异步执行这个方法,通过调用委托类特有的两个方法BeginInvoke和EndInvoke去执行. BeginInvoke和EndInvoke 的 ...
- Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...
收藏地址 http://aierong.cnblogs.com/archive/2005/05/25/162308.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要等待同步 ...
- C# BeginInvoke与EndInvoke的使用
之前,我已经说过了BeginInvoke与Invoke的异同 这里就要再来说说endinvoke的意思了 我们知道 beginvoke就是通过线程的调用来异步的完成一些工作.一般只需要启动它就好,让它 ...
最新文章
- linux达人养成计划学习笔记(四)—— 压缩命令
- 使用Powerdesigner的逆向工程生成PDM(主要是注释可以放进去)
- 网站运维技术与实践之服务器监测常用命令
- php 实现的n,php 实现数据N等分。
- C++ 内存的分配方式
- linux中忘记mysql用户root密码解决方案
- xposed框架_免ROOT 用“太极”替代Xposed框架
- 谈canvas转图片的方法(base64编码)
- vs2017 开关“/NOENTRY”只与 DLL 兼容;链接时不使用“/NOENTRY”
- 截图及录屏工具ShareX
- VMware 中搭建 SylixOS 环境
- 蓝牙键盘 android手机游戏,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘...
- 卸载软件-Uninstall Tool(无残留)
- 【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位
- 带特殊符号|的字符串的截取
- PostgreSQL死锁了怎么办?
- odroidxu4linux,2019年值得期待的5个树莓派替代品
- UML的九种图+包图
- RTFSC - Read The Fucking Source Code
- JAVA微信小程序浴室预约系统毕业设计 开题报告
热门文章
- 欢迎使用CSDN-markdown编辑器11111
- 《2012》:让灾难成为一场洗礼
- 使用握手信号实现跨时钟域数据传输
- 一旦有辞职念头就干不长了吗_每天都有辞职不想上班的冲动,你有吗?
- 360浏览器卸载_陈蛋蛋碎碎念—如何完美地卸载流氓软件
- mysql终端_MySQL之终端(Terminal)管理MySQL
- python计算面积折线图_Python交互图表可视化Bokeh:4. 折线图| 面积图
- html css animation,css animation是什么?
- Day 21 20190205 老男孩python学习第21天 内容整理
- zabbix 从入门到精通