普通方法调用,Invoke,begininvoke三者的区别总结及异步与同步的区别总结
(1)普通方法调用(直接调用)与Invoke()方法调用方法 使用的线程Id是一样的 即属于同步。
(2)BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法调用方法 则是启用了新的线程Id 属于异步
可通过 Thread.CurrentThread.ManagedThreadId 获取当前线程的Id
*委托类型的BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法
异步调用的核心, BeginInvoke(多线程能执行的原因)。
输入和输出变量:表式委托对应的实参。
第二个参数(AsyncCallback callback):回调函数,表示异步调用后自动调用的函数 ,共用一个线程id. AsyncCallback是一个委托 有一个参数(asyncState )
第三个参数(object asyncState):用于向回调函数提供参数信息。返回值:IasyncResult:异步操作状态接口,封装了异步执行中的参数。
EndInvoke监视BeginInvoke。委托类型的EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。该方法知道异步调用的方法所有参数,所以,异步调用完毕后,取出异步调用的结果作为返回值。
对于同步和异步的总结:异步三大特点
(1)同步方法会出现“假死现象”即卡住界面,异步则不会 原因:异步启动了子线程执行任务,主线程得到释放
(2)同步速度慢,异步速度快 原因:异步启动了多个线程执行任务,占用更多的资源(异步时cpu瞬间上升)
(3)异步是无序的 原因:线程的启动和执行是由操作系统决定的,是无序的。可能每个子线程里面耗时不一样
普通方法调用,Invoke,begininvoke三者的区别总结及异步与同步的区别总结的更多相关文章
- Ajax中异步与同步的区别
同步可以解决,只有前一个请求结束后,当前请求才会发起.
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
[分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
今天关闭一个窗体,报出这样的一个错误"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke.",这个不用多想,肯定是那个地方没有释放掉.既然碰到这个问题, ...
- Invoke()/BeginInvoke()区别
查看MSDN如下: Control..::.Invoke ---> 在拥有此控件的基础窗口句柄的线程上执行委托. Control..::.BeginInvoke ---> ...
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
以下是错误报告: 标题: SQL Server 安装程序失败. ------------------------------ SQL Server 安装程序遇到以下错误: 在创建窗口句柄之 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
本文转载:http://blog.csdn.net/playing9c/article/details/7471918 http://blog.csdn.net/beelinkerlidejun/ar ...
- 手动调用run方法和普通方法调用没有区别
手动调用run方法和普通方法调用没有区别
- python中方法调用和函数调用的区别
函数调用: 传几个参数,就会有几个实参方法调用: 默认传递一个参数self,至少要定义一个形参
- C#测试对比不同类型的方法调用的性能
一. 测试方法调用形式 1. 实例方法调用 2. 静态方法调用 3. 实例方法反射调用 4. 委托方法的Invoke调用 5. 委托方法的DynamicInvoke调用 6.委托方法的BeginInv ...
随机推荐
- Linux 的 Out-of-Memory (OOM) Killer
同事在 Linux 服务器上遇到点小问题,我也上去折腾半天.这还是第一次注意到 Linux 这个多年来就存在的特性:OOM Killer .说白了 OOM Killer 就是一层保护机制,用于避免 L ...
- 【LeetCode 38_字符串_算术运算】Count and Say
string countAndSay(int n) { string res; ) return res; res = "; ) { int len = res.size(); int i, ...
- mongdb分布式
搭建高可用mongodb集群(一)——配置mongodb Posted on 17 十一月, 2013 by lanceyan | 21 Replies 在大数据的时代,传统的关系型数据库要能更高的服 ...
- (转) 一致性Hash算法在Memcached中的应用
前言 大家应该都知道Memcached要想实现分布式只能在客户端来完成,目前比较流行的是通过一致性hash算法来实现.常规的方法是将 server的hash值与server的总台数进行求余,即hash ...
- springboot读取配置文件的顺序
前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...
- vue.js权威指南----代码解释实例
1:P61(值绑定) <input type="checkbox" v-model="toggle" :true-value="a" ...
- QLoo graphql engine 学习二 基本试用(kubernetes)
已经测试过docker&& docker-compose 的运行模式,下面测试下kubernetes的运行模式 kubernetes 我使用docker for mac qloo 安装 ...
- Android开发入门
教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...
- Tcl 和 Raft 发明人的软件设计哲学
John Ousterhout(斯坦福大学教授,Tcl 语言.Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A ...
- linux用命令行看网线物理连接状态
inux下有两个命令可以看网线状态: ethtool 和 mii-tool 竟然还都要用,由于网卡所支持的协议不同,哪个网卡能用哪个命令是不一定的. [root@rhel demo]# ethtool ...