查看MSDN如下: Control..::.Invoke ---> 在念轿闹拥有此控件的基础窗口句柄的线程上执行委托。 Control..::.BeginInvoke ---> 在创建控件的基础句柄所在线程上异步执行委托。 显然,Invoke() 与 BeginInvoke() 方法间的主要区别在于“异步”关键字眼。 也就是说, Invoke() 调用时,会阻塞当前线程,等到 Invoke() 方法返回才继续执行后面的代码,表现出“同步”的概念。 BeginInvoke() 调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码,表现出“异步”的概念。 EndInvoke() ,在想获取 BeginInvoke() 执行完毕后的结果时,调用此方法来获取。控件为何会需要Invoke()或BeginInvoke()方法呢? 因为控件的这样一个特点:控件的数据(或状态)值只仔罩能在创建控件的那个线程上被更改。也就是说如果控件是在线程A上创建的,则其它任何线程B都不允许修改控件的值,只可以访问(读取)。控件的值只能在线程A上进行更改。基于以上原因,而又有这样的需求:控件在线程A上创建,又要在线程B中更改其值。所以,Invoke()/BeginInvoke() 就出现了。使线程B可以间接地更改在线程A中创建的控件的值帆判。真正更改控件值的操作仍然是在线程A的上下文中执行。
相关文章
-
哑光玻璃和高透有机玻璃区别
2023-04-19 11:13 阅读(592) -
水晶和钻石马赛克有什么区别
2023-04-19 08:56 阅读(568) -
灯具遥控器 LED遥控器 区别
2023-04-19 08:05 阅读(585)
1 机用丝锥中的H2和H3有什么区别?
631 阅读
2 刻录光驱和dvd光驱的区别
617 阅读
3 中间偃麦草与偃麦草有什么区别?
547 阅读
4 lol吧与英雄联盟吧有什么区别么
571 阅读
5 你知道精油和香水的区别吗
640 阅读