Invoke()/BeginInvoke()区别
来源:互联网 发布:数据库电子书下载 编辑:程序博客网 时间:2024/06/06 05:04
Invoke()/BeginInvoke()区别
- 博客分类:
- C#
查看MSDN如下:
Control..::.Invoke ---> 在拥有此控件的基础窗口句柄的线程上执行委托。
Control..::.BeginInvoke ---> 在创建控件的基础句柄所在线程上异步执行委托。
显然,Invoke() 与 BeginInvoke() 方法间的主要区别在于“异步”关键字眼。
也就是说,
Invoke() 调用时,会阻塞当前线程,等到 Invoke() 方法返回才继续执行后面的代码,表现出“同步”的概念。
BeginInvoke() 调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码,表现出“异步”的概念。
EndInvoke() ,在想获取 BeginInvoke() 执行完毕后的结果时,调用此方法来获取。
控件为何会需要Invoke()或BeginInvoke()方法呢?
因为控件的这样一个特点:控件的数据(或状态)值只能在创建控件的那个线程上被更改。也就是说如果控件是在线程A上创建的,则其它任何线程B都不允许修改控件的值,只可以访问(读取)。控件的值只能在线程A上进行更改。
基于以上原因,而又有这样的需求:控件在线程A上创建,又要在线程B中更改其值。所以,Invoke()/BeginInvoke() 就出现了。使线程B可以间接地更改在线程A中创建的控件的值。真正更改控件值的操作仍然是在线程A的上下文中执行。
转自:http://blog.csdn.net/xiaogang3438792/archive/2009/05/11/4166911.aspx
- Invoke()/BeginInvoke()区别
- Invoke和BeginInvoke 区别
- Invoke() 和BeginInvoke()区别
- Invoke()/BeginInvoke()区别
- Invoke()/BeginInvoke()的区别
- Invoke()/BeginInvoke()区别
- invoke和begininvoke 区别
- Invoke()/BeginInvoke()区别
- c# Invoke和BeginInvoke 区别
- c# Invoke和BeginInvoke 区别
- c# Invoke和BeginInvoke 区别
- c# Invoke和BeginInvoke 区别
- c# Invoke和BeginInvoke 区别
- c# Invoke和BeginInvoke 区别
- Invoke 和 BeginInvoke 的区别
- c# Invoke和BeginInvoke 区别
- Invoke 和 BeginInvoke 的区别
- c# Invoke和BeginInvoke 区别
- 将数据保存到文件中
- 工业物联网浪潮下蓬勃发展的产业
- 会声会影安装问题(安装完成无法打开显示停止运行)
- ZooKeeper系列之四:ZooKeeper的配置
- 递归方法:例题
- Invoke()/BeginInvoke()区别
- Android ble 4.0相关知识总结
- ROS 监控制线程通过setDaemon 设置为随启动线程退出
- 正则表达式学习3
- List、Set、Map、数组之间各种转换
- 学习unity遇到的问题
- char *a 与char a[] 的区别
- Leetcode (307) Range Sum Query - Mutable
- 37. Sudoku Solver(dfs)